Cron 表达式学习
基本结构
Cron 表达式是一种使用简单字符串来表示时间规则的方式,其基本结构如下:
Seconds Minutes Hours DayofMonth Month DayofWeak [Year]
其中 Year 是可选的,不写代表包含所有年份。
举个例子,每月1 号 0 点:0 0 0 1 * ?。
各个域的范围
Seconds、Minutes:0 ~ 59
Hours:0 ~ 23
DayofMonth:1 ~ L
Month:1 ~ 12 或者 JAN FEB MAR APR MAY JUN JUL AUG SEP OCT NOV DEC
DayofWeak:1 ~ 7 或者 SUN MON TUE WED THU FRI SAT
Year:1970 ~ 2099
部分特殊字符
*:表示匹配任意值,如 Month 使用*表示每个月都会触发;
?:只能用在 DayofMonth 和 DayofWeak 两个域,因为这两个域相互影响,比如每月 1 号,是这个周的第几天是不确定的,只能用 ?;
-:表示范围,比如在 Minutes 中使用 10-20,表示从 10 分钟到 20 分钟每分钟触发一次;
/:表示从起始时间开始,每隔固定间隔时间触发一次,比如在 Minutes 中使用 5/20 表示5、25、45分别触发一次;
,:表示列出枚举值,比如在 Minutes 中使用 5,20,表示在第 5 分钟、第 20 分钟分别触发一次;
L、W、#:L 表示最后,使用在DayofMonth 和 DayofWeak 两个域,如果在 DayofWeak 中使用 5L 表示最后一个周四触发;xW 表示最接近 x 的工作日,只能用在 DayofMonth 中,LW 表示每个月最后一个工作日;# 表示每个月第几个星期几,比如 2#1 表示第二个星期日。
部分示例
每天凌晨一点触发一次:0 0 1 * * ? *
每 30 分钟触发一次:0 0/30 * * * ?
每天凌晨 2 ~ 6 点每 20 分钟触发一次:0 0/20 2-6 * * ?
工作日 8 点触发一次:0 0 8 ? * MON-FRI
每月最后一天 23 点执行一次:0 0 23 L * ?