Cron表达式详解


cron表达式的时间格式: s m h d(?) m w(?) y 分别对应 秒>分>时>日>月>周>年

举个栗子说说:

// 每天23:59 分执行
0 59 23 * * ? 
// 每天11:01,11:02,11:03; 12:01,12:02,12:03分执行任务
0 1,2,3 11,12 * * ?

在表达式中,每个域除允许设置数字外,还可以使用一些通配符。

  • *星号()**:可用在所有字段中,表示对应时间域的每一个时刻。在 秒 中,表示每一秒
  • **问号(?)**:只能用在日和周的域中,通常指定为无意义的值,可以理解为占位符
  • **减号(-)**:表达一个时间范围, 比如在 小时中 1-2 表示1点到2点
  • **逗号(,)**:表达一个列表值,如在星期字段中使用“MON,WED,FRI”,则表示星期一,星期三和星期五
  • *斜杠(/)**:x/y表达一个等步长序列,x为起始值,y为增量步长值。如秒中使用0/15,则表示为0,15,30和45秒,而5/15在分钟字段中表示5,20,35,50,你也可以使用/y,它等同于0/y
  • **井号(#)**:仅能用于周域中。它用于指定月份中的第几周的哪一天。例如,如果你指定周域的值为6#3,它意思是某月的第三个周五 (6=星期五,#3意味着月份中的第三周)。另一个例子2#1意思是某月的第一个星期一 (2=星期一,#1意味着月份中的第一周)。注意,假如你指定#5,然而月份中没有第 5 周,那么该月不会触发。
  • 字母—L:L 说明了某域上允许的最后一个值。它仅被日和周域支持。当用在日域上,表示的是在月域上指定的月份的最后一天。例如,当月域上指定了JAN 时,在日域上的L会促使 trigger 在1月31号被触发。假如月域上是SEP,那么 L 会预示着在9月30号触发。换句话说,就是不管指定了哪个月,都是在相应月份的时最后一天触发 trigger。
  • 字母—W:W 字符代表着平日 (Mon-Fri),并且仅能用于日域中。它用来指定离指定日的最近的一个平日。大部分的商业处理都是基于工作周的,所以 W 字符可能是非常重要的。例如,日域中的15W 意味着 “离该月15号的最近一个平日。” 假如15号是星期六,那么 trigger 会在14号(星期五)触发,因为星期四比星期一(这个例子中是17号)离15号更近。(译者Unmi注:不会在17号触发的,如果是15W,可能会是在14号(15号是星期六)或者15号(15号是星期天)触发,也就是只能出现在邻近的一天,如果15号当天为平日直接就会当日执行)。W只能用在指定的日域为单天,不能是范围或列表值。
  • 字母—C:C 字符只在日期和星期字段中使用,代表“Calendar”的意思。它的意思是计划所关联的日期,如果日期没有被关联,则相当于日历中所有日期。例如5C在日期字段中就相当于日历5日以后的第一天。1C在星期字段中相当于星期日后的第一天。
  • LW:这两个字符可以连用,表示在某个月最后一个工作日,即最后一个星期五。
名称 是否必须 允许值 特殊字符
0-59 , - * /
0-59 , - * /
0-23 , - * /
1-31 , - * ? / L W C
1-12 或 JAN-DEC , - * /
1-7 或 SUN-SAT , - * ? / L C #
空 或 1970-2099 , - * /

常用表达式:

  1. 0 10,44 14 ? 3 WED 每年三月的星期三的下午2:10和2:44触发
  2. 0 15 10 ? * MON-FRI 周一至周五的上午10:15触发
  3. 0 15 10 L * ? 每月最后一日的上午10:15触发
  4. 0 15 10 ? * 6L 每月的最后一个星期五上午10:15触发
  5. 0 15 10 ? * 6L 2002-2005 2002年至2005年的每月的最后一个星期五上午10:15触发
  6. 0 15 10 ? * 6#3 每月的第三个星期五上午10:15触发

注:

“?”字符仅被用于天(日)和天(周)两个子表达式,表示不指定值 ,当2个子表达式其中之一被指定了值以后,为了避免冲突,需要将另一个子表达式的值设为“?”


文章作者: Cody_
版权声明: 本博客所有文章除特別声明外,均采用 CC BY 4.0 许可协议。转载请注明来源 Cody_ !
评论
 上一篇
SpringBoot之请求参数详解 SpringBoot之请求参数详解
SpringBoot获取参数的几种方式 直接把表单参数写在Controller对应的方法的形参中 // 适用于get方式提交,不适用于post方式提交 @RequestMapping("/addUser1") public String a
2019-10-20
下一篇 
Java锁的分类总结 Java锁的分类总结
锁在Java中充当了十分重要的角色,不同的锁在不同的场景下能够大大提高程序的运行效率。文章将对不同锁做一个简单的总结。 首先附上两张分类图: 乐观锁 VS 悲观锁乐观锁与悲观锁是一种广义上的概念,体现了看待线程同步的不同角度。在Ja
2019-07-03
  目录