cron表达式 通常由 6个或者七个域组成 :秒 分 时 日 月 周 年 。年有时可以忽略(Seconds Minutes Hours DayofMonth Month DayofWeek)
每个域可以由数字或者特殊符号填充:
规则如下
域 | 允许值 | 允许的特殊符号 |
---|---|---|
秒 Seconds | 0-59 | , - * / 四个字符 |
分 Minutes | 0-59 | , - * / 四个字符 |
时 Hours | 0-23 | , - * / 四个字符 |
日 DayofMonth | 1-31 | ,- * ? / L W C 八个字符 |
月 Month | 1-12 | , - * / 四个字符 |
周 DayofWeek | 1-7 | , - * ? / L C # 八个字符 |
年(可选 可空) Year | 1970-2099 | , - * / 四个字符 |
特殊符号的含义
-
*:可以匹配允许值区域内的任意值
-
?:可以匹配允许值区域内的任意值,但是只有 日 周 两个域可以使用,并且这两个是有排斥的。假设一个场景,希望每月的5号执行一次 ,则cron表达式为 * * * 5 * ?(A) ,不能为 * * * 5 * * (B),如果使用B表达式,则意思为每周都可以,不符合…
-
-:表示范围,如果再 分 域上使用 5-10 ,则表示则在第5分和20分这段时间内,每分钟触发一次
-
/:可以指定触发起始时间和固定间隔时间 比如在 分 域上是使用 5/10 ,表示从第五分开始执行一次,然后每间隔十分钟执行一次
-
L:表示最后的意思 只能在 日 周 连个域使用,如果在 日 域上使用,* 30 8 L * ?表示在每月的最后一天的8:30 触发(如果在6月 则为30日的8:30 如果是7月 则为31日的8:30). 如果使用在 周 域上* 30 8 ? * L 表示在每月的最后一个周六 8:30触发。 周域中还可以域 数字搭配使用 比如 * 30 8 ? * 3L 表示在每月的最后一个星期二触发。 4L表示在周三触发 一次类推
-
W:表示平日(工作日) 只能在日域中使用,它用来指定离指定日期最近的一个平日,比如在日域中使用15W,则会在离15日最近的一个平日触发,假如15日为周六,则会在14日触发,如果15日为平日,则会在15日触发
-
#:只能使用在周域中,表示在月份的第几周的周几,比如 周域的值为 6#3 则会在指定月的第三个星期五触发 (6周五 3本月的第三个星期)
常见的CORN表达式
-
每天 8:30 触发一次
0 30 8 ? * *
-
每天 8:30 ,15:30 触发一次
0 30 8,15 ? * *
-
每天从 9点到17点 每隔半小时触发一次
0 0/30 9-17 ? * *
-
每天从 凌晨1点开始每隔4小时触发一次
0 0 1/4 ? * *
-
每天8点 每隔一分钟触发一次
0 * 8 ? * *
-
周一至周五 每天上午 8:30 触发一次
0 30 8 * * MON-FRI
-
每月的最后一个星期五的18:30触发一次
0 30 18 ? * 6L