Spring Task
简介
Spring Task是Spring框架提供的任务调度工具,可以按照约定的时间自动执行某个代码逻辑。可以使用@Scheduled
注解和Cron
表达式或者周期性的时间间隔来安排任务的执行。
快速入门
在启动类上添加@EnableScheduling
注解以启用调度功能。
@SpringBootApplication
@EnableScheduling
public class TaskApp {
public static void main(String[] args) {
SpringApplication.run(TaskApp.class);
}
}
在需要定时执行的方法上加注解@Scheduled
,常见参数及作用如下:
- fixedRate:定义了方法调用之间的固定周期,以毫秒为单位。例如,如果你指定
fixedRate = 5000
,则方法将每5秒执行一次,不考虑方法执行所需的时间。- fixedDelay:定义了方法执行完成后到下一次方法开始执行之间的延迟,同样是以毫秒为单位。例如,
fixedDelay = 5000
表示在方法执行完成后,5秒钟后再次执行该方法。- initialDelay:用于定义延迟首次执行方法的时间。它通常与
fixedRate
或fixedDelay
结合使用,以确定启动后延迟多久开始执行方法。比如initialDelay = 10000
将会在应用启动后10秒钟才开始执行首次任务。- cron:允许使用 cron 表达式来定义执行计划。cron 表达式是由6或7个空格分隔的时间字段组成,分别表示秒、分钟、小时、日、月、星期和年(可选)。例如,
cron = "0 * * * * ?"
将会在每分钟的开始时刻执行一次。
@Component
public class ScheduleTest {
// 每5秒执行一次
@Scheduled(fixedRate = 5000)
public void doSomething() {
System.out.println("ScheduleTest.doSomething");
}
// 在上一次执行完成后,5秒钟再执行
@Scheduled(fixedDelay = 5000)
public void doSomethingAfterDelay() {
System.out.println("ScheduleTest.doSomethingAfterDelay");
}
// 应用启动10秒后第一次执行,然后每5秒执行一次
@Scheduled(initialDelay = 10000, fixedRate = 5000)
public void doSomethingWithInitialDelay()