This guide walks you through the steps for scheduling tasks with Spring.
You’ll build an application that prints out the current time every five seconds using Spring’s @Scheduled
annotation.
Now that you’ve set up your project, you can create a scheduled task.
src/main/java/hello/ScheduledTasks.java
link:complete/src/main/java/hello/ScheduledTasks.java[role=include]
The Scheduled
annotation defines when a particular method runs.
NOTE: This example uses fixedRate
, which specifies the interval between method invocations measured from the start time of each invocation. There are other options, like fixedDelay
, which specifies the interval between invocations measured from the completion of the task. You can also use @Scheduled(cron=". . .")
expressions for more sophisticated task scheduling.
Although scheduled tasks can be embedded in web apps and WAR files, the simpler approach demonstrated below creates a standalone application. You package everything in a single, executable JAR file, driven by a good old Java main()
method.
src/main/java/hello/Application.java
link:complete/src/main/java/hello/Application.java[role=include]
@EnableScheduling
ensures that a background task executor is created. Without it, nothing gets scheduled.
Logging output is displayed and you can see from the logs that it is on a background thread. You should see your scheduled task fire every 5 seconds:
[...] 2016-08-25 13:10:00.143 INFO 31565 --- [pool-1-thread-1] hello.ScheduledTasks : The time is now 13:10:00 2016-08-25 13:10:05.143 INFO 31565 --- [pool-1-thread-1] hello.ScheduledTasks : The time is now 13:10:05 2016-08-25 13:10:10.143 INFO 31565 --- [pool-1-thread-1] hello.ScheduledTasks : The time is now 13:10:10 2016-08-25 13:10:15.143 INFO 31565 --- [pool-1-thread-1] hello.ScheduledTasks : The time is now 13:10:15
Congratulations! You created an application with a scheduled task. Heck, the actual code was shorter than the build file! This technique works in any type of application.
The following guides may also be helpful: