cron表达式使用范围
cron表达式一般用在定时任务中,通过特定的规则指定时间来设置任务调度,比起只能设置重复时间的simple模式更灵活
表达式结构
cron表达式从左到右用空格分隔
秒 分 时 月份中的日期(DayofMonth) 月份 星期中的日期(DayofWeek) 年
具体使用时最后一位年可以省去
各字段的含义和允许的值
字段 | 允许值 | 特殊字符 |
---|---|---|
秒(Second) | 0~59的整数 | , - * / 四个字符 |
分(Minute) | 0~59的整数 | , - * / 四个字符 |
小时(Hour) | 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) * 表示任意值,即该字段任意时刻,如果用在分(minute)字段,表示每分钟都触发
2) ? 只用于DayofMonth、DayofWeek两个作用域,用于DayofMonth表示每天执行不管这天是几号,用于DayofWeek表示每天执行不管这天是周几,举例说明:设定每天中午12点30分执行,cron表达式为0 30 12 * * ?或者 0 30 12 ?* *
3) - 表示范围,如在Hour域使用3-5,表示在3点到5点,每隔一小时触发一次(3,4,5)
4) / 前边数字表示从此时开始,后边数字表示每个过久。例如在Minute域使用 5/10 表示从5分开始,每10分钟执行一次
5) , 表示枚举值,每个值用,隔开,例如在Hour域使用2,5,8表示在2点,5点,8点执行
6) L 即Last,表示最后,只能用于DayofMonth、DayofWeek两个作用域,在DayofWeek域上使用5L,表示最后一周的周四执行
7) W 表示工作日,即周一到周五,只能作用域DayofMonth域,系统将在离指定日期的最近的有效工作日触发事件。例如:使用5W,若5号为周六,则在4号即周五执行;若5号为周日,则在6号即周一执行;若5号为工作日,则就在5号执行。另外W就近寻找不会跨月。
8) LW 可以连用,作用域DayofMonth域,表示最后一个工作日,即当月的最后一个周五
9) # 用于确定每个月第几个星期几,只能出现在DayofWeek域。例如在4#2,表示某月的第二个星期三。
在一开始使用cron表达式时,可以参考其他示例,但是最好还是理解每个域的含义和符号的作用。
(该文章参考其他cron表达式详解文章,修改了其中混淆和错误的地方,并新加了自己的理解)