cron表达式是定时任务调度最基础的知识 , 因此需要好好理解一下。
表达式的组成:
秒 分 时 日 月 星期 年
字段 | 允许值 | 允许的特殊字符 |
秒(Seconds) | 0~59的整数 | , - * / 四个字符 |
分(Minutes) | 0~59的整数 | , - * / 四个字符 |
小时(Hours) | 0~23的整数 | , - * / 四个字符 |
日期(DayofMonth) | 1~31的整数(但是你需要考虑你月的天数) | ,- * ? / L W C 八个字符 |
月份(Month) | 1~12的整数或者 JAN-DEC | , - * / 四个字符 |
星期(DayofWeek) | 1~7的整数或者 SUN-SAT (1=SUN) | , - * ? / L C # 八个字符 |
年(可选,留空)(Year) | 1970~2099 | , - * / 四个字符 |
这个顺序是固定不变的
每个组成部分(个人习惯上称为 时间单元)都有可以使用的特殊符号
例如 :
* 放在每个时间单元上表示完全匹配每一个,例如每一秒每一年,每一星期 每一小时等等;
- 放在每个时间单元上表示一个闭区间 秒 1-10 :表示第一秒到第十秒 每一秒都匹配, 年2010-2019:10年到19年的每一年都匹配;
/放在每个时间单元上表示间隔 秒 0/10:表示0秒开始第一次然后每间隔10秒匹配/触发一次,分钟10/20:10分钟开始第一次,每间隔20分钟匹配/触发一次;
,放在时间单元上, 表示枚举每个时间单元:秒 0,10,20 表示 0s 10s 和20s匹配/触发
?这个符号就有点意思了, 刚看到表达式的时候, 感觉 ?这个东西是个什么鬼 ?好长时间也没有太理解, ?这个符号的意思表示该时间单位不做参考 防止冲突来使用的,冲突 ?是的, 时间的表述可以通过多个维度进行,例如 2019年1月17日是 星期四, 如果用星期表示今天 就可以用每个星期四, 用日期表示今天就可以用 17日 , 因此如果用星期表示了今天, 那么 日这个时间单位就可以用? 符号设置为不参考该时间单位。下面举个栗子:
2019年每个星期一的凌晨
0 0 0 ? * 2 2019
那么 在日这个时间单位上设置? 不做参考, 星期的时间单位上设置2 (表示星期一)参考起作用了。
最近5次运行时间: | |||||||
|
在比如 每个月的最后一天的凌晨
0 0 0 L * ? *
最近5次运行时间: | |||||||
|
就说这些吧 , 我自己的理解了,若能帮上你,实在是荣幸之至。