简介
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表示某个月第二个星期三 |
网友评论