1. 定时任务步骤
1. 在SpringBoot 启动类添加 @EnableScheduling
2. 在启动类的定时任务方法添加注解 @Scheduled
定时任务core表达式生成器网站 : quartz/Cron/Crontab表达式在线生成工具-BeJSON.com
2. 案例
每隔10秒在控制台打印当前时间
@EnableScheduling // 定时任务注解
@SpringBootApplication
public class SheduledDemoApplication {
public static void main(String[] args) {
SpringApplication.run(SheduledDemoApplication.class, args);
}
// 每隔10秒发送一个请求
@Scheduled(cron = "0/10 * * * * ?")
public void say() {
Date date = new Date();
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
System.out.println(sdf.format(date));
}
}
3. @Scheduled注解参数
3.1 cron
从左到右的顺序值是: 秒分时日月周年
域 | 必填 | 值范围 | 通配符 |
秒 | 是 | 0-59 | ,- * / |
分 | 是 | 0-59 | ,- * / |
时 | 是 | 0-23 | , - * / |
日(一个月中的第几天) | 是 | 1-31 | ,- * / L W |
月 | 是 | 1-12 | , - * / |
周 | 是 | 1-7 | ,- * / ? L # |
年 | 否 | 1970-2099 | , - * / |
corn可以用${ } 获取配置文件的值。而不用在@ Scheduled 中设置具体的。
如@Scheduled(corn = "${sc.value}")
通配符的含义
【,】多个值。如在“周”上设置 “1,2,3“ 表示每周一周二周三都会执行。
【-】区间值。如在”周“上设置”1-3“表示每周一至周三都会执行。
【*】所有值。如在 “秒” 上设置 “ * ” 表示每分钟都会执行。
【/】递增触发。如在”秒“上设置“10/10”表示第10秒开始,每隔10执行一次,即10,20,30,40,50,60秒时执行一次。
【?】不指定值。如每天八点执行,在“周”上设置为 “?”, 即“ 0 0 8 * * ? ”即可。
【L】即 Last(末尾,最后的意思)的缩写。
如在“日”上设置表示当月的最后一天。
在“周”上设置表示每周的周日执行。
在“周”上前面加数字,如“3L”表示该月最后一个星期三执行。
【W】离指定日期最近的工作日(工作日表示周一至周五)执行。W前面只能接具体数字,不能跟其它的通配符。
- 如在“日”上设置“15W”每个月离15号最近的工作日执行。
假设当月15日是周六,那么会在当月14日(周五)触发。
假设当月15日是周日,那么会在当月16日(下周一)触发。
假设当月15日是工作日(周一至周五),在当天触发。
- 如在“日”上设置“1W”表示每月1号之后的最近工作日执行。
假设当月1号是周六,那么会在当月的3号(周一)执行。
【#】序号(表示每月的第几个周几)“周”中特有的。
如在“周”中设置“3#2”表示每月的第二周的周三。
如在“周”中设置“7#5”表示每月的第五周的周日,如果该月第五周没有周日则不执行。
3. 2 zone
表示时区,默认是个字符串。
// 设置上海时区
@Sheduled(zone = "Asia/shanghai")
3.3 fixedDelay 与 fixedDelayString
fixedDelay 表示上次任务结束到下次任务开始的时间间隔。即上次任务结束后,会等待一定时间再执行下一次任务。(long类型)
// 上次任务结束后等待3秒再执行下一次任务
@Scheduled(fixedDelay = 3000)
fixedDelayString 表示意思同上,但唯一不同的是 fixedDelayString 是字符串类型,可以支持占位符。
// 上次任务结束后等待3秒再执行下一次任务
@Scheduled(fixedDelayString = "3000")
占位符表示
// 上次任务结束后等待3秒再执行下一次任务; sc.fixedDelayValue 从读取配置文件中的值,可自定义
@Scheduled(fixedDelayString = "${sc.fixedDelayValue}")
3.4 fixedRate 与 fixedRateString
fixedRate 表示上次任务开始到下次任务开始的时间间隔。不管上次任务又没有执行完(long类型)
// 上次任务开始3秒后执行下次任务
@Scheduled(fixedRate = 3000)
fixedRateString表示意思同上,但唯一不同的是 fixedRateString是字符串类型,可以支持占位符。
@Scheduled(fixedRateString= “3000”)
占位符方式
// 上次任务开始后等待3秒再执行下一次任务; sc.fixedDelayValue 从读取配置文件中的值,可自定义
@Scheduled(fixedRateString= "${sc.fixedDelayValue}")
3.5 initialDelay与initialDelayString
initialDelay 表示首次执行任务前等待多长时间。(long类型)
// 第一次延迟3秒后执行
@Scheduled(initialDelay = 3000)
initialDelayString同上,但唯一不同的是 initialDelayString 是字符串类型,可以支持占位符。
// 第一次延迟3秒后执行
@Scheduled(initialDelayString= "3000")
占位符方式
// sc.fixedDelayValue 从读取配置文件中的值,可自定义
@Scheduled(initialDelayString= "${sc.fixedDelayValue}")
3.6 CRON_DISABLED
CRON_DISABLED 默认值为 “-”,表示禁用该任务
// 该注解的定时任务方法不执行
@Scheduled(cron = "-")