Close

Spring - Using TaskScheduler Trigger

[Last Updated: Oct 29, 2025]

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());
  }
}

Output

Task: 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());
  }
}

Output

Task: 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 Project

Dependencies and Technologies Used:

  • spring-context 6.2.12 (Spring Context)
     Version Compatibility: 4.0.0.RELEASE - 6.2.12Version List
    ×

    Version compatibilities of spring-context with this example:

    • 4.0.0.RELEASE
    • 4.0.1.RELEASE
    • 4.0.2.RELEASE
    • 4.0.3.RELEASE
    • 4.0.4.RELEASE
    • 4.0.5.RELEASE
    • 4.0.6.RELEASE
    • 4.0.7.RELEASE
    • 4.0.8.RELEASE
    • 4.0.9.RELEASE
    • 4.1.0.RELEASE
    • 4.1.1.RELEASE
    • 4.1.2.RELEASE
    • 4.1.3.RELEASE
    • 4.1.4.RELEASE
    • 4.1.5.RELEASE
    • 4.1.6.RELEASE
    • 4.1.7.RELEASE
    • 4.1.8.RELEASE
    • 4.1.9.RELEASE
    • 4.2.0.RELEASE
    • 4.2.1.RELEASE
    • 4.2.2.RELEASE
    • 4.2.3.RELEASE
    • 4.2.4.RELEASE
    • 4.2.5.RELEASE
    • 4.2.6.RELEASE
    • 4.2.7.RELEASE
    • 4.2.8.RELEASE
    • 4.2.9.RELEASE
    • 4.3.0.RELEASE
    • 4.3.1.RELEASE
    • 4.3.2.RELEASE
    • 4.3.3.RELEASE
    • 4.3.4.RELEASE
    • 4.3.5.RELEASE
    • 4.3.6.RELEASE
    • 4.3.7.RELEASE
    • 4.3.8.RELEASE
    • 4.3.9.RELEASE
    • 4.3.10.RELEASE
    • 4.3.11.RELEASE
    • 4.3.12.RELEASE
    • 4.3.13.RELEASE
    • 4.3.14.RELEASE
    • 4.3.15.RELEASE
    • 4.3.16.RELEASE
    • 4.3.17.RELEASE
    • 4.3.18.RELEASE
    • 4.3.19.RELEASE
    • 4.3.20.RELEASE
    • 4.3.21.RELEASE
    • 4.3.22.RELEASE
    • 4.3.23.RELEASE
    • 4.3.24.RELEASE
    • 4.3.25.RELEASE
    • 4.3.26.RELEASE
    • 4.3.27.RELEASE
    • 4.3.28.RELEASE
    • 4.3.29.RELEASE
    • 4.3.30.RELEASE
    • 5.0.0.RELEASE
    • 5.0.1.RELEASE
    • 5.0.2.RELEASE
    • 5.0.3.RELEASE
    • 5.0.4.RELEASE
    • 5.0.5.RELEASE
    • 5.0.6.RELEASE
    • 5.0.7.RELEASE
    • 5.0.8.RELEASE
    • 5.0.9.RELEASE
    • 5.0.10.RELEASE
    • 5.0.11.RELEASE
    • 5.0.12.RELEASE
    • 5.0.13.RELEASE
    • 5.0.14.RELEASE
    • 5.0.15.RELEASE
    • 5.0.16.RELEASE
    • 5.0.17.RELEASE
    • 5.0.18.RELEASE
    • 5.0.19.RELEASE
    • 5.0.20.RELEASE
    • 5.1.0.RELEASE
    • 5.1.1.RELEASE
    • 5.1.2.RELEASE
    • 5.1.3.RELEASE
    • 5.1.4.RELEASE
    • 5.1.5.RELEASE
    • 5.1.6.RELEASE
    • 5.1.7.RELEASE
    • 5.1.8.RELEASE
    • 5.1.9.RELEASE
    • 5.1.10.RELEASE
    • 5.1.11.RELEASE
    • 5.1.12.RELEASE
    • 5.1.13.RELEASE
    • 5.1.14.RELEASE
    • 5.1.15.RELEASE
    • 5.1.16.RELEASE
    • 5.1.17.RELEASE
    • 5.1.18.RELEASE
    • 5.1.19.RELEASE
    • 5.1.20.RELEASE
    • 5.2.0.RELEASE
    • 5.2.1.RELEASE
    • 5.2.2.RELEASE
    • 5.2.3.RELEASE
    • 5.2.4.RELEASE
    • 5.2.5.RELEASE
    • 5.2.6.RELEASE
    • 5.2.7.RELEASE
    • 5.2.8.RELEASE
    • 5.2.9.RELEASE
    • 5.2.10.RELEASE
    • 5.2.11.RELEASE
    • 5.2.12.RELEASE
    • 5.2.13.RELEASE
    • 5.2.14.RELEASE
    • 5.2.15.RELEASE
    • 5.2.16.RELEASE
    • 5.2.17.RELEASE
    • 5.2.18.RELEASE
    • 5.2.19.RELEASE
    • 5.2.20.RELEASE
    • 5.2.21.RELEASE
    • 5.2.22.RELEASE
    • 5.2.23.RELEASE
    • 5.2.24.RELEASE
    • 5.2.25.RELEASE
    • 5.3.0
    • 5.3.1
    • 5.3.2
    • 5.3.3
    • 5.3.4
    • 5.3.5
    • 5.3.6
    • 5.3.7
    • 5.3.8
    • 5.3.9
    • 5.3.10
    • 5.3.11
    • 5.3.12
    • 5.3.13
    • 5.3.14
    • 5.3.15
    • 5.3.16
    • 5.3.17
    • 5.3.18
    • 5.3.19
    • 5.3.20
    • 5.3.21
    • 5.3.22
    • 5.3.23
    • 5.3.24
    • 5.3.25
    • 5.3.26
    • 5.3.27
    • 5.3.28
    • 5.3.29
    • 5.3.30
    • 5.3.31
    • 5.3.32
    • 5.3.33
    • 5.3.34
    • 5.3.35
    • 5.3.36
    • 5.3.37
    • 5.3.38
    • 5.3.39
    • Compatible Java Version: 17+
    • 6.0.0
    • 6.0.1
    • 6.0.2
    • 6.0.3
    • 6.0.4
    • 6.0.5
    • 6.0.6
    • 6.0.7
    • 6.0.8
    • 6.0.9
    • 6.0.10
    • 6.0.11
    • 6.0.12
    • 6.0.13
    • 6.0.14
    • 6.0.15
    • 6.0.16
    • 6.0.17
    • 6.0.18
    • 6.0.19
    • 6.0.20
    • 6.0.21
    • 6.0.22
    • 6.0.23
    • 6.1.0
    • 6.1.1
    • 6.1.2
    • 6.1.3
    • 6.1.4
    • 6.1.5
    • 6.1.6
    • 6.1.7
    • 6.1.8
    • 6.1.9
    • 6.1.10
    • 6.1.11
    • 6.1.12
    • 6.1.13
    • 6.1.14
    • 6.1.15
    • 6.1.16
    • 6.1.17
    • 6.1.18
    • 6.1.19
    • 6.1.20
    • 6.1.21
    • 6.2.0
    • 6.2.1
    • 6.2.2
    • 6.2.3
    • 6.2.4
    • 6.2.5
    • 6.2.6
    • 6.2.7
    • 6.2.8
    • 6.2.9
    • 6.2.10
    • 6.2.11
    • 6.2.12

    Versions in green have been tested.

  • spring-test 4.3.4.RELEASE (Spring TestContext Framework)
  • JDK 25
  • Maven 3.9.11

Spring - Trigger Example Select All Download
  • spring-core-scheduling-trigger-examples
    • src
      • main
        • java
          • com
            • logicbig
              • example
                • PeriodicTriggerExample.java

    See Also