Following method of TaskScheduler uses the parameter Trigger
ScheduledFuture<?> schedule(Runnable task, Trigger trigger)
Trigger interface determines the next execution time based on past execution outcomes or it can be based on any arbitrary conditions.
Check out this tutorial for more details about Trigger interface.
Spring provides two implementations of Trigger: PeriodicTrigger and CronTrigger.
Examples
PeriodicTrigger example
PeriodicTrigger is a trigger for periodic task execution. The period may be applied as either fixed-rate or fixed-delay.
package com.logicbig.example;
import org.springframework.scheduling.concurrent.ThreadPoolTaskScheduler;
import org.springframework.scheduling.support.PeriodicTrigger;
import java.time.LocalTime;
import java.util.concurrent.TimeUnit;
public class PeriodicTriggerExample {
public static void main(String[] args) throws InterruptedException {
ThreadPoolTaskScheduler s = new ThreadPoolTaskScheduler();
s.setPoolSize(5);
s.initialize();
for (int i = 0; i < 2; i++) {
s.schedule(getTask(), new PeriodicTrigger(5, TimeUnit.SECONDS));
}
Thread.sleep(10000);
//shutting down after 10 sec
s.getScheduledThreadPoolExecutor().shutdownNow();
}
public static Runnable getTask() {
return () -> System.out.printf("Task: %s, Time: %s%n",
Thread.currentThread().getName(),
LocalTime.now());
}
}
OutputTask: ThreadPoolTaskScheduler-1, Time: 16:08:07.193815400 Task: ThreadPoolTaskScheduler-2, Time: 16:08:07.193815400 Task: ThreadPoolTaskScheduler-2, Time: 16:08:12.200387900 Task: ThreadPoolTaskScheduler-1, Time: 16:08:12.200387900
CronTrigger example
Cron, generally, is a utility to create time based expressions particularly used to schedule tasks.
The following example demonstrate how to use CronTrigger to schedule a task which will execute every 3 seconds.
package com.logicbig.example;
import org.springframework.scheduling.concurrent.ThreadPoolTaskScheduler;
import org.springframework.scheduling.support.CronTrigger;
import java.time.LocalTime;
public class CronTriggerExample {
public static void main(String[] args) throws InterruptedException {
ThreadPoolTaskScheduler s = new ThreadPoolTaskScheduler();
s.setPoolSize(5);
s.initialize();
for (int i = 0; i < 2; i++) {
s.schedule(getTask(), new CronTrigger("0/3 * * * * *"));
}
Thread.sleep(10000);
//shutting down after 10 seconds
s.getScheduledThreadPoolExecutor().shutdown();
}
public static Runnable getTask() {
return () -> System.out.printf("Task: %s, Time: %s%n",
Thread.currentThread().getName(),
LocalTime.now());
}
}
OutputTask: ThreadPoolTaskScheduler-2, Time: 16:08:21.011798100 Task: ThreadPoolTaskScheduler-1, Time: 16:08:21.011798100 Task: ThreadPoolTaskScheduler-1, Time: 16:08:24.012974500 Task: ThreadPoolTaskScheduler-2, Time: 16:08:24.012974500 Task: ThreadPoolTaskScheduler-3, Time: 16:08:27.008363700 Task: ThreadPoolTaskScheduler-4, Time: 16:08:27.012350300 Task: ThreadPoolTaskScheduler-5, Time: 16:08:30.009166800 Task: ThreadPoolTaskScheduler-4, Time: 16:08:30.009166800
Example ProjectDependencies and Technologies Used: - spring-context 6.2.12 (Spring Context)
Version Compatibility: 4.0.0.RELEASE - 6.2.12 Version compatibilities of spring-context with this example: Versions in green have been tested.
- spring-test 4.3.4.RELEASE (Spring TestContext Framework)
- JDK 25
- Maven 3.9.11
|