Spring Cron表达式

简介

Spring的定时任务在日常工作中会经常遇到,本文详细对各个位置进行说明,并且对每个位置出现的特殊字符进行说明。

详细说明

Spring cron的的表达式至少包含6个值,分别是秒、分、时、日、月、星期,而第七位年常常省略。任务最小精确到秒,再小的毫秒就不支持了(如果需要使用毫米级别,可使用fixDelay或者fixRate)。

位置说明

举例说明:
"0 0/30 * * * *" 表示每整点和半点触发

位置 允许的值 允许的特殊字符
0-59 , – * /
0-59 , – * /
0-23 , – * /
1-31 , – * / ? L W C
1-12 或者 JAN-DEC , – * /
星期 1- 7(1为星期日) 或者 SUN-SAT , – * / ? L C #
一般为空,1970-2099 , – * /

特殊字符说明

特殊字符 说明
, 用来隔开枚举值,例如 “3,4,5 * * * * *” 表示每分钟内3,4,5秒的时候触发
用来表示范围值,例如 “3-50 * 1-3,8 * * *” 表示1点到3点和8点每分钟内3至50秒内每秒都会触发,
* 用来匹配任意值
/ a/b a表示开始触发的时间,从a开始,每加b个单位触发,例如 “20/19 * 1-4 * * *” 表示1点到4点每分钟内第20秒的时候触发,每加19秒(39,58)触发,注意这里和每隔多少秒还是有区别的,这里后面加上的数不能超过该字段允许的范围,例如58秒的时候下一次是77(58+19),但是已经超过了该字段最大值(59),如果理解成每19秒触发,则58的下一个19秒是下一个分钟的18秒,这里并不会触发, “20/40 * 1-4 * * *” 这个表达式也是在20秒执行(一分钟内只会执行一次),并不是每隔40秒,因为60(20+40)已经不再这个范围内了
? 在日和星期位置出现,可以理解成一个不关心的值,注意和的区别,因为日和星期不是统一的,如果表示每个月的第几天,而不关心星期几,在星期的位上则用?,如果用了则表示任意的星期,例如每个月1号0点0时0秒,0 0 0 1 * ?
L 在日和星期位置出现;单独的L在日出现,表示每个月的最后一天;单独L在星期出现,表示星期六;如果在星期位置出现并且前面有数字,则表示每个月的最后一个星期几,例如2L,表示每个月的最后一个星期一
W 只能在日的位置出现,表示工作日(星期一到星期五),在离指定日期最近的工作日触发,例如3W,如果3号是星期六,则最近的工作日是星期五,即2号触发,如果3号是星期日,则最近的工作日是星期一,即4号触发
C 在日和星期位置出现,它的意思是计划所关联的日期,如果日期没有被关联,则相当于日历中所有日期。例如5C在日位置中就相当于日历5日以后的第一天。1C在星期位置中相当于星期日后的第一天。
# 只能在星期出现,表示第几个(#后面的数)星期几(#前面的数),例如4#2表示某个月第二个星期三

你可能感兴趣的:(Spring Cron表达式)