读书人

Quartz Cron 表达式 运用

发布时间: 2012-11-16 14:12:14 作者: rapoo

Quartz Cron 表达式 使用

'W' 可用于“日”字段。用来指定历给定日期最近的工作日(周一到周五) 。比如你将“日”字段设为"15W",意为: "离该月15号最近的工作日"。因此如果15号为周六,触发器会在14号即周五调用。如果15号为周日, 触发器会在16号也就是周一触发。如果15号为周二,那么当天就会触发。然而如果你将“日”字段设为"1W", 而一号又是周六, 触发器会于下周一也就是当月的3号触发,因为它不会越过当月的值的范围边界。'W'字符只能用于“日”字段的值为单独的一天而不是一系列值的时候。

'L'和'W'可以组合用于“日”字段表示为'LW',意为"该月最后一个工作日"。

'#' 字符可用于“周几”字段。该字符表示“该月第几个周×”,比如"6#3"表示该月第三个周五( 6表示周五而"#3"该月第三个)。再比如: "2#1" = 表示该月第一个周一而 "4#5" = 该月第五个周三。注意如果你指定"#5"该月没有第五个“周×”,该月是不会触发的。

'C' 字符可用于“日”和“周几”字段,它是"calendar"的缩写。它表示为基于相关的日历所计算出的值(如果有的话)。如果没有关联的日历, 那它等同于包含全部日历。“日”字段值为"5C"表示"日历中的第一天或者5号以后",“周几”字段值为"1C"则表示"日历中的第一天或者周日以后"。

对于“月份”字段和“周几”字段来说合法的字符都不是大小写敏感的。

下面是一些完整的例子:


表达式???? 含义?
"0 0 12 * * ?"???? 每天中午十二点触发?
"0 15 10 ? * *"???? 每天早上10:15触发?
"0 15 10 * * ?"???? 每天早上10:15触发?
"0 15 10 * * ? *"???? 每天早上10:15触发?
"0 15 10 * * ? 2005"???? 2005年的每天早上10:15触发?
"0 * 14 * * ?"???? 每天从下午2点开始到2点59分每分钟一次触发?
"0 0/5 14 * * ?"???? 每天从下午2点开始到2:55分结束每5分钟一次触发?
"0 0/5 14,18 * * ?"???? 每天的下午2点至2:55和6点至6点55分两个时间段内每5分钟一次触发?
"0 0-5 14 * * ?"???? 每天14:00至14:05每分钟一次触发?
"0 10,44 14 ? 3 WED"???? 三月的每周三的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"???? 每月最后一个周五的10:15触发?
"0 15 10 ? * 6L 2002-2005"???? 2002年至2005年的每月最后一个周五的10:15触发?
"0 15 10 ? * 6#3"???? 每月的第三个周五的10:15触发

---------------------------------------------

Field Name? Mandatory?? Allowed Values? Allowed Special Characters?
Seconds???? YES???????? 0-59???????????? , - * /?
Minutes???? YES???????? 0-59???????????? , - * /?
Hours?????? YES???????? 0-23???????????? , - * /?
Day of month? YES?????? 1-31???????????? , - * ? / L W C?
Month???????? YES??????? 1-12 or JAN-DEC? , - * /?
Day of week?? YES??????? 1-7 or SUN-SAT?? , - * ? / L C #?
Year????????? NO? empty, 1970-2099??????? , - * /?


项目实例:
????????????? second? minute? hours? dayOfMonth? month? dayOfWeek? year
每月???????? 0??????????? 0?????????? 6????????????? ???????????????????? *??????????????? 6#3??????????? ?
每周??????? 59?????????? 59???????? 18??????????? ???????????????????? *??????????????? 1??????????????? ?
自定义??? 28????????? 47????????? 9???????????? 30???????????????? 7??????????????? ????????????? 2006

每月:每个月的第三个星期五的上午6:00:00 触发
每周:每周的星期日的下午18:59:59 触发
自定义:2006年7月30日上午9:47:28 触发

所有星号对应的段位置,都可以出现后面的符号(, - * /)
(? / L C)这些符号可以出现在"一月哪天"和"星期"段位置
(w)只能出现在"一月哪天"段位置
(#)只能出现在"星期"段位置

解释符号代表的意思:
* 代表任意合法的字段
0 * 17 * * ? :表示在每天的5 PM 到 5:59之间的每一分钟启动scheduler

? 表示没值被指定
如果同时指定"一月哪天"和"星期",可能两者对应不起来
0 0,15,30,45 * * * ? :表示每刻钟启动scheduler
所以推荐用法是其中一个指定值,另一个用?指定

/ 表示时间的增量
0 0/15 * * * ? :表示每刻钟启动scheduler

- 表示值的范围
0 45 3-8 ? * *

L 如果用在"一月哪天"段上,表示一个月的最后一天;如果用在"星期"段上。表示一个星期的最后一天(星期六)
0 0 8 L * ? :表示每个月最后一天的8点启动scheduler

W 表示最靠近给定时间的一天,(必须是星期一到星期五)

# 例如 6#3表示一个月的第三个星期五

读书人网 >软件架构设计

热点推荐