Springboot定时任务@Scheduled
SpringBoot中对定时任务也提供了支持,使用很简单,两个注解就可以开启定时任务,@Scheduled用于指定定时任务,@EnableScheduling用来开启定时任务。
SpringBoot 2.x版本
1.简单示例
2.相关概念
一、简单示例
1.建立ScheduledService类,写一个方法,在方法上使用注解@Scheduled。属性fixedDelay = 1000,initialDelay = 5000指初始化完成后等待5秒开始定时,每隔1秒执行一次该方法。
@Service
public class ScheduledService {
@Scheduled(fixedDelay = 1000,initialDelay = 5000)
public void scheduled(){
System.out.println("Hello Scheduled...");
}
}
2.在入口类上加上注解@EnableScheduling,开启自动装配。
3.启动项目,会发现自动打印语句。
二、相关概念
2.1、属性
- fixedRate属性:该属性的含义是上一个调用开始后再次调用的延时(不用等待上一次调用完成),这样就会存在重复执行的问题,所以不是建议使用,但数据量如果不大时在配置的间隔时间内可以执行完也是可以使用的。
- fixedDelay属性:该属性的功效与fixedRate则是相反的,配置了该属性后会等到方法执行完成后延迟配置的时间再次执行该方法。
- initialDelay属性:该属性跟fixedDelay、fixedRate有着密切的关系,该属性的作用是第一次执行延迟时间,只是做延迟的设定,并不会控制其他逻辑,所以要配合fixedDelay或者fixedRate来使用。
2.2、Cron表达式
通过Cron表达式可以对属性中的世界进行指定。
字段 允许值 允许的特殊字符
秒 0-59 , - * /
分 0-59 , - * /
小时 0-23 , - * /
日期 1-31 , - * ? / L W C
月份 1-12 , - * /
星期 1-7 , - * ? / L C #
年 1970-2099 , - * /
“*”字符被用来指定所有的值。
“?”:字符只在日期域和星期域中使用。它被用来指定“非明确的值”。
“-”:字符被用来指定一个范围。如:“10-12”在小时域意味着“10点、11点、12点”。
“,”:字符被用来指定另外的值。如:“MON,WED,FRI”在星期域里表示”星期一、星期三、星期五”。
“/”:字符用于指定增量。如:“0/15”在秒域意思是每分钟的0,15,30和45秒。
例如:
0 0 10,14,16 * * ? 每天上午10点,下午2点,4点
“0 0/5 14 * * ?” 在每天下午2点到下午2:55期间的每5分钟触发
0 0 12 ? * WED 表示每个星期三中午12点
“0 15 10 * * ? 2005” 2005年的每天上午10:15触发
“0 * 14 * * ?” 在每天下午2点到下午2:59期间的每1分钟触发
“0 0-5 14 * * ?” 在每天下午2点到下午2:05期间的每1分钟触发
“0 15 10 ? * MON-FRI” 周一至周五的上午10:15触发
“0 15 10 15 * ?” 每月15日上午10:15触发