Cron表达式是一个字符串,结构非常简单。Cron表达式从左到右分为6或7个字段,每个字段代表一个含义,用空格隔开。如下图所示:
Cron一共有7位,最后一位是年份,可以留空。因此,一般我们可以写6位。另外,第6位星期(DayofWeek)的取值范围为1~7,从星期日(SUN)开始。
Cron表达式的时间字段除了允许设置数值外,还可以使用一些特殊的字符,提供列表、范围、通配符等功能,说明如下:
*:表示字段中的“每个”,比如在Minutes字段中,*表示每分钟。
?:用在DayofMonth和DayofWeek字段中,表示“没有指定值”。这对于需要指定一个或者两个字段的值,而不需要对其他字段进行设置来说相当有用。例如,想在一个月的某一天(比如第10天)执行某项任务,而不在乎具体是哪一天,就可以把“10”放在DayofMonth字段,然后把“?”放在DayofWeek字段。
-:指定范围,例如,“10-12”在Hours字段中表示“10点到12点”。,:指定附加值,例如,“MON,WED,FRI”在DayofWeek字段/:用于指定值的增量,例如,“0/15”在Seconds字段中表示“从0开始,每隔15秒”。
L:只用在DayofMonth和DayofWeek中,这个字符是“Last”的简写,但是在两个字段中的意义不同。例如,在DayofMonth字段中,“L”表示本月的最后一天,即1月的31日,非闰年的2月28日。如果它用在DayofWeek中,则表示“7”或者“SAT”。但是,如果这个字符跟在别的值后面,则表示“当月的最后的周XXX”,如“6L”或者“FRIL”都表示本月的最后一个周五。同时,也可以用来指定第某个月的最后一天的倒数第几天,如“L-3”表示某月最后一天的倒数第三天。注意:当使用“L”选项时,重要的是不要指定列表或者值范围,否则会导致混乱。
W:用于DayofWeek字段中,指定给定日(星期一到星期五)最近的一天,如“15W”表示“距离月中15日最近的工作日是周几”。
#:表示本月中的第几个周几,如DayofWeek字段中的“6#3”或者“FRI#3”表示“本月中第三个周五”。
参考书籍《springboot从入门到实战-章为忠著》