時(shí)間格式: ?s> m >h >d> m> w(?)> y(?) ? ? 分別對應(yīng): 秒>分>小時(shí)>日>月>周>年,
1.每天什么時(shí)候執(zhí)行:
0 59 23 * * ?: 如下為每天23:59:00開始執(zhí)行
0 1,2,3 11,12 * * ? : 每天11:01,11:02,11:03; 12:01,12:02,12:03分執(zhí)行任務(wù)
2.每隔多久執(zhí)行:
匯總說明:
Cron表達(dá)式的時(shí)間字段除允許設(shè)置數(shù)值外夏漱,還可使用一些特殊的字符沟沙,提供列表嗡官、范圍、通配符等功能公黑,細(xì)說如下:
●星號(hào)(*):可用在所有字段中翘瓮,表示對應(yīng)時(shí)間域的每一個(gè)時(shí)刻逗概,例如颅夺,*在分鐘字段時(shí),表示“每分鐘”对供;
●問號(hào)(?):該字符只在日期和星期字段中使用位他,它通常指定為“無意義的值”,相當(dāng)于點(diǎn)位符产场;
●減號(hào)(-):表達(dá)一個(gè)范圍鹅髓,如在小時(shí)字段中使用“10-12”,則表示從10到12點(diǎn)京景,即10,11,12窿冯;
●逗號(hào)(,):表達(dá)一個(gè)列表值,如在星期字段中使用“MON,WED,FRI”确徙,則表示星期一醒串,星期三和星期五;
●斜杠(/):x/y表達(dá)一個(gè)等步長序列鄙皇,x為起始值芜赌,y為增量步長值。如在分鐘字段中使用0/15伴逸,則表示為0,15,30和45秒较鼓,而5/15在分鐘字段中表示5,20,35,50,你也可以使用*/y违柏,它等同于0/y博烂;
Quartz cron 表達(dá)式的格式十分類似于 UNIX cron 格式,但還是有少許明顯的區(qū)別漱竖。區(qū)別之一就是 Quartz 的格式向下支持到秒級(jí)別的計(jì)劃禽篱,而 UNIX cron 計(jì)劃僅支持至分鐘級(jí)。許多我們的觸發(fā)計(jì)劃要基于秒級(jí)遞增的(例如馍惹,每45秒)躺率,因此這是一個(gè)非常好的差異。
在 UNIX cron 里万矾,要執(zhí)行的作業(yè)(或者說命令)是存放在 cron 表達(dá)式中的悼吱,在第六個(gè)域位置上。Quartz 用 cron 表達(dá)式存放執(zhí)行計(jì)劃良狈。引用了 cron 表達(dá)式的CronTrigger在計(jì)劃的時(shí)間里會(huì)與 job 關(guān)聯(lián)上后添。
另一個(gè)與 UNIX cron 表達(dá)式的不同點(diǎn)是在表達(dá)式中支持域的數(shù)目。UNIX 給出五個(gè)域(分薪丁、時(shí)遇西、日、月和周)严嗜,Quartz 提供七個(gè)域粱檀。表 5.1 列出了 Quartz cron 表達(dá)式支持的七個(gè)域。
表 5.1. Quartz Cron 表達(dá)式支持到七個(gè)域
名稱是否必須允許值特殊字符
秒是0-59, - * /
分是0-59, - * /
時(shí)是0-23, - * /
日是1-31, - * ? / L W C
月是1-12 或 JAN-DEC, - * /
周是1-7 或 SUN-SAT, - * ? / L C #
年否空 或 1970-2099, - * /
月份和星期的名稱是不區(qū)分大小寫的漫玄。FRI和fri是一樣的茄蚯。
域之間有空格分隔,這和 UNIX cron 一樣睦优。無可爭辯的渗常,我們能寫的最簡單的表達(dá)式看起來就是這個(gè)了:
* * * ? * *
這個(gè)表達(dá)會(huì)每秒鐘(每分種的、每小時(shí)的刨秆、每天的)激發(fā)一個(gè)部署的 job凳谦。
·理解特殊字符
同 UNIX cron 一樣,Quartz cron 表達(dá)式支持用特殊字符來創(chuàng)建更為復(fù)雜的執(zhí)行計(jì)劃衡未。然而尸执,Quartz 在特殊字符的支持上比標(biāo)準(zhǔn) UNIX cron 表達(dá)式更豐富了。
*星號(hào)
使用星號(hào)(*) 指示著你想在這個(gè)域上包含所有合法的值缓醋。例如如失,在月份域上使用星號(hào)意味著每個(gè)月都會(huì)觸發(fā)這個(gè) trigger。
表達(dá)式樣例:
0 * 17 * * ?
意義:每天從下午5點(diǎn)到下午5:59中的每分鐘激發(fā)一次 trigger送粱。它停在下午 5:59 是因?yàn)橹?17 在小時(shí)域上褪贵,在下午 6 點(diǎn)時(shí),小時(shí)變?yōu)?18 了,也就不再理會(huì)這個(gè) trigger脆丁,直到下一天的下午5點(diǎn)世舰。
在你希望 trigger 在該域的所有有效值上被激發(fā)時(shí)使用*字符。
?問號(hào)
?號(hào)只能用在日和周域上槽卫,但是不能在這兩個(gè)域上同時(shí)使用跟压。你可以認(rèn)為?字符是 "我并不關(guān)心在該域上是什么值。" 這不同于星號(hào)歼培,星號(hào)是指示著該域上的每一個(gè)值震蒋。? 是說不為該域指定值。
不能同時(shí)這兩個(gè)域上指定值的理由是難以解釋甚至是難以理解的躲庄〔槠剩基本上,假定同時(shí)指定值的話噪窘,意義就會(huì)變得含混不清了:考慮一下笋庄,如果一個(gè)表達(dá)式在日域上有值11,同時(shí)在周域上指定了WED效览。那么是要 trigger 僅在每個(gè)月的11號(hào)无切,且正好又是星期三那天被激發(fā)?還是在每個(gè)星期三的11號(hào)被激發(fā)呢丐枉?要去除這種不明確性的辦法就是不能同時(shí)在這兩個(gè)域上指定值哆键。
只要記住,假如你為這兩域的其中一個(gè)指定了值瘦锹,那就必須在另一個(gè)字值上放一個(gè)?籍嘹。
表達(dá)式樣例:
0 10,44 14 ? 3 WEB
意義:在三月中的每個(gè)星期三的下午 2:10 和 下午 2:44 被觸發(fā)。
,逗號(hào)
逗號(hào) (,) 是用來在給某個(gè)域上指定一個(gè)值列表的弯院。例如辱士,使用值 0,15,30,45 在秒域上意味著每15秒觸發(fā)一個(gè) trigger。
表達(dá)式樣例:
0 0,15,30,45 * * * ?
意義:每刻鐘觸發(fā)一次 trigger听绳。
/斜杠
斜杠 (/) 是用于時(shí)間表的遞增的颂碘。我們剛剛用了逗號(hào)來表示每15分鐘的遞增,但是我們也能寫成這樣0/15椅挣。
表達(dá)式樣例:
0/15 0/30 * * * ?
意義:在整點(diǎn)和半點(diǎn)時(shí)每15秒觸發(fā) trigger头岔。
- 中劃線
中劃線 (-) 用于指定一個(gè)范圍。例如鼠证,在小時(shí)域上的 3-8 意味著 "3,4,5,6,7 和 8 點(diǎn)峡竣。" 域的值不允許回卷,所以像 50-10 這樣的值是不允許的量九。
表達(dá)式樣例:
0 45 3-8 ? * *
意義:在上午的3點(diǎn)至上午的8點(diǎn)的45分時(shí)觸發(fā) trigger适掰。
L字母
L說明了某域上允許的最后一個(gè)值颂碧。它僅被日和周域支持。當(dāng)用在日域上类浪,表示的是在月域上指定的月份的最后一天载城。例如,當(dāng)月域上指定了JAN時(shí)戚宦,在日域上的L會(huì)促使 trigger 在1月31號(hào)被觸發(fā)个曙。假如月域上是SEP,那么 L 會(huì)預(yù)示著在9月30號(hào)觸發(fā)受楼。換句話說,就是不管指定了哪個(gè)月呼寸,都是在相應(yīng)月份的時(shí)最后一天觸發(fā) trigger艳汽。
表達(dá)式0 0 8 L * ?意義是在每個(gè)月最后一天的上午 8:00 觸發(fā) trigger。在月域上的 * 說明是 "每個(gè)月"对雪。
當(dāng)L字母用于周域上河狐,指示著周的最后一天,就是星期六 (或者數(shù)字7)瑟捣。所以如果你需要在每個(gè)月的最后一個(gè)星期六下午的 11:59 觸發(fā) trigger馋艺,你可以用這樣的表達(dá)式0 59 23 ? * L。
當(dāng)使用于周域上迈套,你可以用一個(gè)數(shù)字與L連起來表示月份的最后一個(gè)星期 X捐祠。例如,表達(dá)式0 0 12 ? * 2L說的是在每個(gè)月的最后一個(gè)星期一觸發(fā) trigger桑李。
不要讓范圍和列表值與 L 連用
雖然你能用星期數(shù)(1-7)與 L 連用踱蛀,但是不允許你用一個(gè)范圍值和列表值與 L 連用。這會(huì)產(chǎn)生不可預(yù)知的結(jié)果贵白。
W字母
W字符代表著平日 (Mon-Fri)率拒,并且僅能用于日域中。它用來指定離指定日的最近的一個(gè)平日禁荒。大部分的商業(yè)處理都是基于工作周的猬膨,所以 W 字符可能是非常重要的。例如呛伴,日域中的15W意味著 "離該月15號(hào)的最近一個(gè)平日勃痴。" 假如15號(hào)是星期六,那么 trigger 會(huì)在14號(hào)(星期五)觸發(fā)磷蜀,因?yàn)樾瞧谒谋刃瞧谝唬ㄟ@個(gè)例子中是17號(hào))離15號(hào)更近召耘。(譯者Unmi注:不會(huì)在17號(hào)觸發(fā)的,如果是15W褐隆,可能會(huì)是在14號(hào)(15號(hào)是星期六)或者15號(hào)(15號(hào)是星期天)觸發(fā)污它,也就是只能出現(xiàn)在鄰近的一天,如果15號(hào)當(dāng)天為平日直接就會(huì)當(dāng)日執(zhí)行)。W只能用在指定的日域?yàn)閱翁焐辣幔荒苁欠秶蛄斜碇怠?/p>
#井號(hào)
#字符僅能用于周域中德澈。它用于指定月份中的第幾周的哪一天。例如固惯,如果你指定周域的值為6#3梆造,它意思是某月的第三個(gè)周五 (6=星期五,#3意味著月份中的第三周)葬毫。另一個(gè)例子2#1意思是某月的第一個(gè)星期一 (2=星期一镇辉,#1意味著月份中的第一周)。注意贴捡,假如你指定#5忽肛,然而月份中沒有第 5 周,那么該月不會(huì)觸發(fā)烂斋。
此處的 Cron 表達(dá)式 cookbook 旨在為常用的執(zhí)行需求提供方案屹逛。盡管不可能列舉出所有的表達(dá)式,但下面的應(yīng)該為滿足你的業(yè)務(wù)需求提供了足夠的例子汛骂。
·分鐘的 Cron 表達(dá)式
表 5.1. 包括了分鐘頻度的任務(wù)計(jì)劃 Cron 表達(dá)式
用法表達(dá)式
每天的從 5:00 PM 至 5:59 PM 中的每分鐘觸發(fā)0 * 17 * * ?
每天的從 11:00 PM 至 11:55 PM 中的每五分鐘觸發(fā)0 0/5 23 * * ?
每天的從 3:00 至 3:55 PM 和 6:00 PM 至 6:55 PM 之中的每五分鐘觸發(fā)0 0/5 15,18 * * ?
每天的從 5:00 AM 至 5:05 AM 中的每分鐘觸發(fā)0 0-5 5 * * ?
·日上的 Cron 表達(dá)式
表 5.2. 基于日的頻度上任務(wù)計(jì)劃的 Cron 表達(dá)式
用法表達(dá)式
每天的 3:00 AM0 0 3 * * ?
每天的 3:00 AM (另一種寫法)0 0 3 ? * *
每天的 12:00 PM (中午)0 0 12 * * ?
在 2005 中每天的 10:15 AM0 15 10 * * ? 2005
·周和月的 Cron 表達(dá)式
表 5.3. 基于周和/或月的頻度上任務(wù)計(jì)劃的 Cron 表達(dá)式
用法表達(dá)式
在每個(gè)周一,二, 三和周四的 10:15 AM0 15 10 ? * MON-FRI
每月15號(hào)的 10:15 AM0 15 10 15 * ?
每月最后一天的 10:15 AM0 15 10 L * ?
每月最后一個(gè)周五的 10:15 AM0 15 10 ? * 6L
在 2002, 2003, 2004, 和 2005 年中的每月最后一個(gè)周五的 10:15 AM0 15 10 ? * 6L 2002-2005
每月第三個(gè)周五的 10:15 AM0 15 10 ? * 6#3
每月從第一天算起每五天的 12:00 PM (中午)0 0 12 1/5 * ?
每一個(gè) 11 月 11 號(hào)的 11:11 AM0 11 11 11 11 ?
三月份每個(gè)周三的 2:10 PM 和 2:44 PM0 10,44 14 ? 3 WED