post

详解Quartz定时任务框架中的Cron时间表达式

Quartz是英文“石英”的意思,如果你的表上有这个单词,这只说明你的手表是电子石英脉冲手表。在编程中,有一个名为Quartz的开源作业调度框架,顾名思义,就是定时执行任务。多应用于Java编程中与Spring框架相集成,目前也有Quartz.net。

Quartz使用类似于Linux下的Cron表达式定义时间规则,Cron表达式是由6或7个字段(年字段是可选字段)的字符串组成,字段与字段之间用空格来隔开,最小支持到秒数级别。

本篇文章参考的是官网帮助文档的 Cron表达式 ,英文在线帮助文档的,有兴趣的可以前往:
Quartz官方下载地址 | Cron expressions

下面是官方对Cron表达式的说明,表格已经详细的列出了每个字段能使用的匹配符和每个字段的有效取值范围。

Quartz Cron表达式

Cron表达式使用格式
Seconds Minutes Hours DayofMonth Month DayofWeek [Year]
[年]

每个符号代表的含义:

  1. * :匹配该域的任意值;如*用在分所在的域,表示每分钟都会触发事件。
  2. ? :匹配该域的任意值。
  3. :匹配一个特定的范围值;如时所在的域的值是10-12,表示10、11、12点的时候会触发事件。
  4. , :匹配多个指定的值;如周所在的域的值是2,4,6,表示在周一、周三、周五就会触发事件(1表示周日,2表示周一,3表示周二,以此类推,7表示周六)。
  5. / :左边是开始触发时间,右边是每隔固定时间触发一次事件,如秒所在的域的值是5/15,表示5秒、20秒、35秒、50秒的时候都触发一次事件。
  6. L :last,最后的意思,如果是用在天这个域,表示月的最后一天,如果是用在周所在的域,如6L,表示某个月最后一个周五。(外国周日是星耀日,周一是月耀日,一周的开始是周日,所以1L=周日,6L=周五。)
  7. W :weekday,工作日的意思。如天所在的域的值是15W,表示本月15日最近的工作日,如果15日是周六,触发器将触发上14日周五。如果15日是周日,触发器将触发16日周一。如果15日不是周六或周日,而是周一至周五的某一个,那么它就在15日当天触发事件。
  8. # :用来指定每个月的第几个星期几,如6#3表示某个月的第三个星期五。
实用的例子
表达式 含义
“0 0 12 * * ?” 每天12:00触发事件
“0 15 10 ? * *” 每天10:15触发事件
“0 15 10 * * ?” 每天10:15触发事件
“0 15 10 * * ? *” 每天10:15触发事件
“0 15 10 * * ? 2005” 2005年的每天10:15触发事件
“0 * 14 * * ?” 每天14点开始触发,每分钟触发一次,14:59分结束
“0 0/5 14 * * ?” 每天14点开始触发到14:59分结束的每5分钟触发一次事件
“0 0/5 14,18 * * ?” 每天14点开始到14:59期间和18点到18:59期间的每5分钟触发一次事件
“0 0-5 14 * * ?” 每天14点到14:05期间的每1分钟触发一次事件
“0 10,44 14 ? 3 WED” 每年3月的星期三的14:10和14:44触发一次事件
“0 15 10 ? * MON-FRI” 周一至周五的10:15触发一次事件
“0 15 10 15 * ?” 每月15日10:15触发一次事件
“0 15 10 L * ?” 每月最后一日的10:15触发一次事件
“0 15 10 ? * 6L” 每月的最后一个星期五10:15触发一次事件
“0 15 10 ? * 6L 2002-2005” 2002年至2005年的每月的最后一个星期五10:15触发一次事件
“0 15 10 ? * 6#3” 每月的第三个星期五10:15触发一次事件

主要内容转载自:fancydeepin

Comments

  1. ?写的不对。?只用在星期和日期上。这两个值是互斥的,表示某一个值不用

  2. ?写的不对。?只用在星期和日期上。这两个值是互斥的,表示某一个值不用

  3. 谢谢总结~

在线工具进行回复 取消回复

*

· 2,435 次浏览