@Scheduled的cron表达式
@Scheduled生效条件
启动类加上注解@EnableScheduling
定时任务的类加上注解@Component
或@Service
等
定时任务的方法加上注解@Scheduled
cron表达式
┌───────────── second (0-59)
│ ┌───────────── minute (0 - 59)
│ │ ┌───────────── hour (0 - 23)
│ │ │ ┌───────────── day of the month (1 - 31)
│ │ │ │ ┌───────────── month (1 - 12) (or JAN-DEC)
│ │ │ │ │ ┌───────────── day of the week (0 - 7)
│ │ │ │ │ │ (0 or 7 is Sunday, or MON-SUN)
│ │ │ │ │ │
* * * * * *
L
: 表示last最后一个,在不同的字段中含义不一样
- 在第4个字段
day of month
中表示月的最后一天
,如果L后面有一个负数(L-n)表示该月的第n天到最后一天 - 在第6个字段
day of week
中表示周的最后一天
,如果前缀有数字或3个字母,即dL 或 DDDL
表示该月的最后一个周几, 1L 或 MONL 表示该月的最后一个周一
W
: 工作日,用在第4个字段中,如果前缀是一个数字,即nW
,表示距离天n最近的工作日,LW
表示该月的最后一个工作日
示例: 9W 表示距离9号最近的工作日
- 如果9号是工作日,那就9号执行
- 如果9号是周六那就提前到周五8号执行
- 如果9号是周日,那就推迟到周一10号执行
注意: 如果n是1,且1号是周六,也会推迟到周一执行,即1W
表示每月的第1个工作日
#
: 用在第6个字段上,形式可以是 d#n 或 DDD#n
表示第n个周几, 如 1#2 或 MON#2 表示该月的第2个周一
示例
0 0 * * * * : 每个整点
*/10 * * * * * : 每10秒
0 0 8-10 * * * : 每天的8,9,10整点
0 0 6,19 * * * : 每天的6点整,19点整
0 0/30 8-10 * * * : 每天当小时是8~10时,每30分钟执行一次,即 8:00, 8:30, 9:00, 9:30, 10:00 和 10:30
0 0 9-17 * * MON-FRI : 周一到周五期间每天的9点到17点的整点
0 0 0 25 12 ? : 每年的12月25号的零点
0 0 0 L * * : 每月最后一天的零点
0 0 0 L-3 * * : 每月的第3天到最后1天的零点
0 0 0 1W * * : 每月第一个工作日的零点
0 0 0 LW * * : 每月最后一个工作日的零点
0 0 0 * * 5L : 每月最后一个周五的零点
0 0 0 * * THUL : 每月最后一个周四的零点
0 0 0 ? * 5#2 : 每月的第2个周五的零点
0 0 0 ? * MON#1 : 每月第1个周一的零点
宏指令
The following macros are also supported:
"@yearly" (or "@annually") to run un once a year, i.e. "0 0 0 1 1 *",
"@monthly" to run once a month, i.e. "0 0 0 1 * *",
"@weekly" to run once a week, i.e. "0 0 0 * * 0",
"@daily" (or "@midnight") to run once a day, i.e. "0 0 0 * * *",
"@hourly" to run once an hour, i.e. "0 0 * * * *".
例如 @Scheduled(cron = "@hourly")
等效于 @Scheduled(cron = "0 0 * * * *")
参考
类:org.springframework.scheduling.support.CronExpression 方法:parse()的注释