cron表达式
Spring只支持到DayOfWeek的前六个部分
这六个部分以空格来区分
星期是从星期天开始
通用的符号 ,-*/
,表示列举出的枚举值。
例如:在分钟里面使用5,20 则表示在时间间隔分钟数为5、20时触发的事件
如果没有逗号则表示一个具体的值
- 表示范围。
例如在分钟里面使用5-20,则表示在事件分钟数为5-20 每一分钟都触发的事件,
如果此时在秒上设置的是0,那么就表示在每小时里面的5分0秒触发一次,6分0秒触发一次,一指到20分0秒触发完,下一个小时继续如此
* 表示匹配该域的任意值
例如在分钟域使用*,则表示时间分钟数不做限制,每分钟都在触发事件
例如秒设置2,分钟设置* ,则就表示,在1分2秒,2分2秒。。。直到59分2秒都会触发,下一个小时继续如此
/表示起始时间开始触发(左侧),然后每隔固定的时间触发一次(右侧),
例如在分钟域使用5/20,表示时间的分钟数为5时触发一次,然后每个20分钟触发一次即为25,45再次触发一次,然后这个小时以后的时间就不再触发,从下个小时开始触发
思考1:0 0 2 1 * ?
每隔0秒,0分,每天两点,每个月的1号,*代表每个月,?代表不限定
整个的意思就是:每个月的1号2时0分0秒执行一次
思考2:0 10,44 14 ? 3 WED
在每年的3月的星期三14时10分0秒和14时44分0秒会触发(每年就触发这两次)
专用符号
?只能在DayofMonth和DayofWeek两个域,由于DayofMonth和DayofWeek互斥,因此只能对其中一个进行设置?
L表示最后,只能在DayofMonth和DayofWeek两个域,如果在DayofWeek域使用5L,意味着在最后一个星期四触发
w 表示有效工作日(周一到周五),只能出现在DayofMonth域,系统将在离指定日期最近的有效工作日触发事件
W不可以单独用:比如DayofMonth写了5w ,
意为:在每个月5号最近的工作日触发(既可以往前推又可以往后推)简单来说就是就近工作日原则
LW可用连用,表示在某个月的最后一个工作日
# 用于确定每个月第几个星期几,只能出现在DayofWeek域。
例如4#2,表示某个月的第二个星期三
4表示星期三 2表示第二个
C 只能在DayofMonth和DayofWeek两个域,需要关联日历,如果没关联可以忽略(使用很少)
专有符号除?外,在Spring定时任务中都不支持