字段 | 允許值 | 允許的特殊字符 | ||
---|---|---|---|---|
秒 |
0-59 |
, - * / |
||
分 |
0-59 |
, - * / |
||
小時(shí) |
0-23 |
, - * / |
||
日期 |
1-31 |
, - * ? / L W C |
||
月份 |
1-12 或者 JAN-DEC |
, - * / |
||
星期 |
1-7 或者 SUN-SAT |
, - * ? / L C # |
||
年(可選) |
留空, 1970-2099 |
, - * / |
The '*' character is used to specify all values. For example, "*" in the minute field means "every minute".
“*”字符被用來指定所有的值。如:”*“在分鐘的字段域里表示“每分鐘”。
The '?' character is allowed for the day-of-month and day-of-week fields. It is used to specify 'no specific value'. This is useful when you need to specify something in one of the two fileds, but not the other. See the examples below for clarification.
“?”字符只在日期域和星期域中使用。它被用來指定“非明確的值”。當(dāng)你需要通過在這兩個(gè)域中的一個(gè)來指定一些東西的時(shí)候,它是有用的。看下面的例子你就會(huì)明白。
月份中的日期和星期中的日期這兩個(gè)元素時(shí)互斥的一起應(yīng)該通過設(shè)置一個(gè)問號(hào)(?)來表明不想設(shè)置那個(gè)字段
The '-' character is used to specify ranges For example "10-12" in the hour field means "the hours 10, 11 and 12".
“-”字符被用來指定一個(gè)范圍。如:“10-12”在小時(shí)域意味著“10點(diǎn)、11點(diǎn)、12點(diǎn)”。
The ',' character is used to specify additional values. For example "MON,WED,FRI" in the day-of-week field means "the days Monday, Wednesday, and Friday".
“,”字符被用來指定另外的值。如:“MON,WED,FRI”在星期域里表示”星期一、星期三、星期五”.
The '/' character is used to specify increments. For example "0/15" in the seconds field means "the seconds 0, 15, 30, and 45". And "5/15" in the seconds field means "the seconds 5, 20, 35, and 50". Specifying '*' before the '/' is equivalent to specifying 0 is the value to start with. Essentially, for each field in the expression, there is a set of numbers that can be turned on or off. For seconds and minutes, the numbers range from 0 to 59. For hours 0 to 23, for days of the month 0 to 31, and for months 1 to 12. The "/" character simply helps you turn on every "nth" value in the given set. Thus "7/6" in the month field only turns on month "7", it does NOT mean every 6th month, please note that subtlety.
The 'L' character is allowed for the day-of-month and day-of-week fields. This character is short-hand for "last", but it has different meaning in each of the two fields. For example, the value "L" in the day-of-month field means "the last day of the month" - day 31 for January, day 28 for February on non-leap years. If used in the day-of-week field by itself, it simply means "7" or "SAT". But if used in the day-of-week field after another value, it means "the last xxx day of the month" - for example "6L" means "the last friday of the month". When using the 'L' option, it is important not to specify lists, or ranges of values, as you'll get confusing results.
L是‘last’的省略寫法可以表示day-of-month和day-of-week域,但在兩個(gè)字段中的意思不同,例如day-of-month域中表示一個(gè)月的最后一天,
如果在day-of-week域表示‘7’或者‘SAT’,如果在day-of-week域中前面加上數(shù)字,它表示一個(gè)月的最后幾天,例如‘6L’就表示一個(gè)月的最后一個(gè)
星期五,
The 'W' character is allowed for the day-of-month field. This character is used to specify the weekday (Monday-Friday) nearest the given day. As an example, if you were to specify "15W" as the value for the day-of-month field, the meaning is: "the nearest weekday to the 15th of the month". So if the 15th is a Saturday, the trigger will fire on Friday the 14th. If the 15th is a Sunday, the trigger will fire on Monday the 16th. If the 15th is a Tuesday, then it will fire on Tuesday the 15th. However if you specify "1W" as the value for day-of-month, and the 1st is a Saturday, the trigger will fire on Monday the 3rd, as it will not 'jump' over the boundary of a month's days. The 'W' character can only be specified when the day-of-month is a single day, not a range or list of days
.
The 'L' and 'W' characters can also be combined for the day-of-month expression to yield 'LW', which translates to "last weekday of the month".
The '#' character is allowed for the day-of-week field. This character is used to specify "the nth" XXX day of the month. For example, the value of "6#3" in the day-of-week field means the third Friday of the month (day 6 = Friday and "#3" = the 3rd one in the month). Other examples: "2#1" = the first Monday of the month and "4#5" = the fifth Wednesday of the month. Note that if you specify "#5" and there is not 5 of the given day-of-week in the month, then no firing will occur that month.
The 'C' character is allowed for the day-of-month and day-of-week fields. This character is short-hand for "calendar". This means values are calculated against the associated calendar, if any. If no calendar is associated, then it is equivalent to having an all-inclusive calendar. A value of "5C" in the day-of-month field means "the first day included by the calendar on or after the 5th". A value of "1C" in the day-of-week field means "the first day included by the calendar on or after sunday".
關(guān)于cronExpression的介紹:
字段 允許值 允許的特殊字符
秒 0-59 , - * /
分 0-59 , - * /
小時(shí) 0-23 , - * /
日期 1-31 , - * ? / L W C
月份 1-12 或者 JAN-DEC , - * /
星期 1-7 或者 SUN-SAT , - * ? / L C #
年(可選) 留空, 1970-2099 , - * /
表達(dá)式意義
"0 0 12 * * ?" 每天中午12點(diǎn)觸發(fā)
"0 15 10 ? * *" 每天上午10:15觸發(fā)
"0 15 10 * * ?" 每天上午10:15觸發(fā)
"0 15 10 * * ? *" 每天上午10:15觸發(fā)
"0 15 10 * * ? 2005" 2005年的每天上午10:15觸發(fā)
"0 * 14 * * ?" 在每天下午2點(diǎn)到下午2:59期間的每1分鐘觸發(fā)
"0 0/5 14 * * ?" 在每天下午2點(diǎn)到下午2:55期間的每5分鐘觸發(fā)
"0 0/5 14,18 * * ?" 在每天下午2點(diǎn)到2:55期間和下午6點(diǎn)到6:55期間的每5分鐘觸發(fā)
"0 0-5 14 * * ?" 在每天下午2點(diǎn)到下午2:05期間的每1分鐘觸發(fā)
"0 10,44 14 ? 3 WED" 每年三月的星期三的下午2:10和2:44觸發(fā)
"0 15 10 ? * MON-FRI" 周一至周五的上午10:15觸發(fā)
"0 15 10 15 * ?" 每月15日上午10:15觸發(fā)
"0 15 10 L * ?" 每月最后一日的上午10:15觸發(fā)
"0 15 10 ? * 6L" 每月的最后一個(gè)星期五上午10:15觸發(fā)
"0 15 10 ? * 6L 2002-2005" 2002年至2005年的每月的最后一個(gè)星期五上午10:15觸發(fā)
"0 15 10 ? * 6#3" 每月的第三個(gè)星期五上午10:15觸發(fā)
每天早上6點(diǎn)
0 6 * * *
每兩個(gè)小時(shí)
0 */2 * * *
晚上11點(diǎn)到早上8點(diǎn)之間每兩個(gè)小時(shí),早上八點(diǎn)
0 23-7/2,8 * * *
每個(gè)月的4號(hào)和每個(gè)禮拜的禮拜一到禮拜三的早上11點(diǎn)
0 11 4 * 1-3
1月1日早上4點(diǎn)
0 4 1 1 *
quartz的高級(jí)特性不僅如此
1 數(shù)據(jù)庫存儲(chǔ)
2 集群支持
3 數(shù)據(jù)庫持久化任務(wù),trigger
4 trigger 的停止,運(yùn)行
5 任務(wù)的任意添加
6 比corntrigger 更詳盡的任務(wù)安排
7 線程的內(nèi)部數(shù)據(jù)交換
一個(gè)cron表達(dá)式有至少6個(gè)(也可能7個(gè))有空格分隔的時(shí)間元素。
按順序依次為
1.秒(0~59)
2.分鐘(0~59)
3.小時(shí)(0~23)
4.天(月)(0~31,但是你需要考慮你月的天數(shù))
5.月(0~11)
6.天(星期)(1~7 1=SUN 或 SUN,MON,TUE,WED,THU,F(xiàn)RI,SAT)
7.年份(1970-2099)
其中每個(gè)元素可以是一個(gè)值(如6),一個(gè)連續(xù)區(qū)間(9-12),一個(gè)間隔時(shí)間(8-18/4)(/表示每隔4小時(shí)),一個(gè)列表(1,3,5),通配符。
由于"月份中的日期"和"星期中的日期"這兩個(gè)元素互斥的,必須要對(duì)其中一個(gè)設(shè)置?.
0 0 10,14,16 * * ? 每天上午10點(diǎn),下午2點(diǎn),4點(diǎn)
0 0/30 9-17 * * ??? 朝九晚五工作時(shí)間內(nèi)每半小時(shí)
0 0 12 ? * WED 表示每個(gè)星期三中午12點(diǎn)
有些子表達(dá)式能包含一些范圍或列表
例如:子表達(dá)式(天(星期))可以為 “MON-FRI”,“MON,WED,F(xiàn)RI”,“MON-WED,SAT”
“*”字符代表所有可能的值
因此,“*”在子表達(dá)式(月)里表示每個(gè)月的含義,“*”在子表達(dá)式(天(星期))表示星期的每一天
“/”字符用來指定數(shù)值的增量
例如:在子表達(dá)式(分鐘)里的“0/15”表示從第0分鐘開始,每15分鐘 ;
在子表達(dá)式(分鐘)里的“3/20”表示從第3分鐘開始,每20分鐘(它和“3,23,43”)的含義一樣
“?”字符僅被用于天(月)和天(星期)兩個(gè)子表達(dá)式,表示不指定值
當(dāng)2個(gè)子表達(dá)式其中之一被指定了值以后,為了避免沖突,需要將另一個(gè)子表達(dá)式的值設(shè)為“?”
“L” 字符僅被用于天(月)和天(星期)兩個(gè)子表達(dá)式,它是單詞“last”的縮寫
但是它在兩個(gè)子表達(dá)式里的含義是不同的。
在天(月)子表達(dá)式中,“L”表示一個(gè)月的最后一天 ,
在天(星期)自表達(dá)式中,“L”表示一個(gè)星期的最后一天,也就是SAT
如果在“L”前有具體的內(nèi)容,它就具有其他的含義了
例如:“6L”表示這個(gè)月的倒數(shù)第6天,“FRIL”表示這個(gè)月的最后一個(gè)星期五
注意:在使用“L”參數(shù)時(shí),不要指定列表或范圍,因?yàn)檫@會(huì)導(dǎo)致問題
============================================
CronTrigger配置完整格式為: [秒] [分] [小時(shí)] [日] [月] [周] [年]
序號(hào) | 說明 | 是否必填 | 允許填寫的值 | 允許的通配符 |
1 | 秒 | 是 | 0-59 | , - * / |
2 | 分 | 是 | 0-59 | , - * / |
3 | 小時(shí) | 是 | 0-23 | , - * / |
4 | 日 | 是 | 1-31 | , - * ? / L W |
5 | 月 | 是 | 1-12 or JAN-DEC | , - * / |
6 | 周 | 是 | 1-7 or SUN-SAT | , - * ? / L # |
7 | 年 | 否 | empty 或 1970-2099 | , - * / |
通配符說明:
* 表示所有值. 例如:在分的字段上設(shè)置 "*",表示每一分鐘都會(huì)觸發(fā)。
? 表示不指定值。使用的場景為不需要關(guān)心當(dāng)前設(shè)置這個(gè)字段的值。例如:要在每月的10號(hào)觸發(fā)一個(gè)操作,但不關(guān)心是周幾,所以需要周位置的那個(gè)字段設(shè)置為"?" 具體設(shè)置為 0 0 0 10 * ?
- 表示區(qū)間。例如 在小時(shí)上設(shè)置 "10-12",表示 10,11,12點(diǎn)都會(huì)觸發(fā)。
, 表示指定多個(gè)值,例如在周字段上設(shè)置 "MON,WED,FRI" 表示周一,周三和周五觸發(fā)
/ 用于遞增觸發(fā)。如在秒上面設(shè)置"5/15" 表示從5秒開始,每增15秒觸發(fā)(5,20,35,50)。 在月字段上設(shè)置'1/3'所示每月1號(hào)開始,每隔三天觸發(fā)一次。
L 表示最后的意思。在日字段設(shè)置上,表示當(dāng)月的最后一天(依據(jù)當(dāng)前月份,如果是二月還會(huì)依據(jù)是否是潤年[leap]), 在周字段上表示星期六,相當(dāng)于"7"或"SAT"。如果在"L"前加上數(shù)字,則表示該數(shù)據(jù)的最后一個(gè)。例如在周字段上設(shè)置"6L"這樣的格式,則表示“本月最后一個(gè)星期五"
W 表示離指定日期的最近那個(gè)工作日(周一至周五). 例如在日字段上設(shè)置"15W",表示離每月15號(hào)最近的那個(gè)工作日觸發(fā)。如果15號(hào)正好是周六,則找最近的周五(14號(hào))觸發(fā), 如果15號(hào)是周未,則找最近的下周一(16號(hào))觸發(fā).如果15號(hào)正好在工作日(周一至周五),則就在該天觸發(fā)。如果指定格式為 "1W",它則表示每月1號(hào)往后最近的工作日觸發(fā)。如果1號(hào)正是周六,則將在3號(hào)下周一觸發(fā)。(注,"W"前只能設(shè)置具體的數(shù)字,不允許區(qū)間"-").
# 序號(hào)(表示每月的第幾個(gè)周幾),例如在周字段上設(shè)置"6#3"表示在每月的第三個(gè)周六.注意如果指定"#5",正好第五周沒有周六,則不會(huì)觸發(fā)該配置(用在母親節(jié)和父親節(jié)再合適不過了) ;
小提示:
'L'和 'W'可以一組合使用。如果在日字段上設(shè)置"LW",則表示在本月的最后一個(gè)工作日觸發(fā);
周字段的設(shè)置,若使用英文字母是不區(qū)分大小寫的,即MON 與mon相同;
常用示例:
0 0 12 * * ? | 每天12點(diǎn)觸發(fā) |
0 15 10 ? * * | 每天10點(diǎn)15分觸發(fā) |
0 15 10 * * ? | 每天10點(diǎn)15分觸發(fā) |
0 15 10 * * ? * | 每天10點(diǎn)15分觸發(fā) |
0 15 10 * * ? 2005 | 2005年每天10點(diǎn)15分觸發(fā) |
0 * 14 * * ? | 每天下午的 2點(diǎn)到2點(diǎn)59分每分觸發(fā) |
0 0/5 14 * * ? | 每天下午的 2點(diǎn)到2點(diǎn)59分(整點(diǎn)開始,每隔5分觸發(fā)) |
0 0/5 14,18 * * ? | 每天下午的 2點(diǎn)到2點(diǎn)59分、18點(diǎn)到18點(diǎn)59分(整點(diǎn)開始,每隔5分觸發(fā)) |
0 0-5 14 * * ? | 每天下午的 2點(diǎn)到2點(diǎn)05分每分觸發(fā) |
0 10,44 14 ? 3 WED | 3月分每周三下午的 2點(diǎn)10分和2點(diǎn)44分觸發(fā) |
0 15 10 ? * MON-FRI | 從周一到周五每天上午的10點(diǎn)15分觸發(fā) |
0 15 10 15 * ? | 每月15號(hào)上午10點(diǎn)15分觸發(fā) |
0 15 10 L * ? | 每月最后一天的10點(diǎn)15分觸發(fā) |
0 15 10 ? * 6L | 每月最后一周的星期五的10點(diǎn)15分觸發(fā) |
0 15 10 ? * 6L 2002-2005 | 從2002年到2005年每月最后一周的星期五的10點(diǎn)15分觸發(fā) |
0 15 10 ? * 6#3 | 每月的第三周的星期五開始觸發(fā) |
0 0 12 1/5 * ? | 每月的第一個(gè)中午開始每隔5天觸發(fā)一次 |
0 11 11 11 11 ? | 每年的11月11號(hào) 11點(diǎn)11分觸發(fā)(光棍節(jié)) |