系统运行中常常会遇到定时任务或延时任务,SpringBoot中提供了@Scheduled注解对定时或延时任务的声明,其主要用法
@Scheduled(fixedRate=2000)
上一次开始执行时间点后2秒再次执行
@Scheduled(fixedDelay=2000)
上一次执行完毕时间点后2秒再次执行
@Scheduled(initialDelay=1000, fixedDelay=2000
第一次延迟1秒执行,然后在上一次执行完毕时间点后2秒再次执行
@Scheduled(cron="* * * * * ?"):按cron规则执行。
常用示例:
@Scheduled(cron="0 30 14 * * ?") 每天14:30执行
@Scheduled(cron="0 0 0 10 * ?") 每月10日执行
@Scheduled(cron="0 * 14 * * ?") 每天下午的 2点到2点59分每分触发
@Scheduled(cron="0 15 10 * * ? 2005") 2005年每天10点15分触发
@Scheduled(cron="0 0/5 14 * * ?") 每天下午的 2点到2点59分(整点开始,每隔5分触发)
@Scheduled(cron="0 0/5 14,18 * * ?") 每天下午的 2点到2点59分(整点开始,每隔5分触发) 每天下午的 18点到18点59分(整点开始,每隔5分触发)
@Scheduled(cron="0 0-5 14 * * ?") 每天下午的 2点到2点05分每分触发
@Scheduled(cron="0 10,44 14 ? 3 WED") 3月分每周三下午的 2点10分和2点44分触发
@Scheduled(cron="0 15 10 ? * MON-FRI") 从周一到周五每天上午的10点15分触发
@Scheduled(cron="0 15 10 15 * ?") 每月15号上午10点15分触发
@Scheduled(cron="0 15 10 L * ?") 每月最后一天的10点15分触发
@Scheduled(cron="0 15 10 ? * 6L") 每月最后一周的星期五的10点15分触发
@Scheduled(cron="0 15 10 ? * 6L 2002-2005") 从2002年到2005年每月最后一周的星期五的10点15分触发
@Scheduled(cron="0 15 10 ? * 6#3") 每月的第三周的星期五开始触发
@Scheduled(cron="0 0 12 1/5 * ?") 每月的第一个中午开始每隔5天触发一次
@Scheduled(cron="0 11 11 11 11 ?") 每年的11月11号 11点11分触发
示例:实现以下两个触发任务
(1)每天中午12时触发,在控制台上打印HelloWorld。
(2)程序运行后每隔1小时再次执行,在控制台上打印Haha。
任务类
@Component
public class MyJob{
@Scheduled(cron="0 0 12 * * ?")
public void job1() {
System.out.println("Hello World");
}
@Scheduled(fixedDelay=3600000)
public void job2() {
System.out.println("Haha");
}
}
Application类
添加启动定时任务的注解@EnableScheduling
@SpringBootApplication
@EnableScheduling
public class Myproj2Application {
public static void main(String[] args) {
SpringApplication.run(Myproj2Application.class, args);
}
}
启动SpringBoot程序后,可以看到任务触发。(可以调整任务起始时间和重复执行的间隔观察执行效果)