javascript
Spring Cron Expression
2019獨(dú)角獸企業(yè)重金招聘Python工程師標(biāo)準(zhǔn)>>>
一、簡(jiǎn)介
CRON表達(dá)式是由6個(gè)或7個(gè)由空格分隔的元素組成的字符串,這些元素可以包含任何允許的值,以及該元素所允許的特殊字符的不同組合。元素如下:
表1-1 ?CRON表達(dá)式允許的元素和值
| 元素 | 是否必須 | 允許的值 | 允許的特殊字符 |
| 秒 | Y | 0-59 | , - * / |
| 分鐘 | Y | 0-59 | , - * / |
| 小時(shí) | Y | 0-23 | , - * / |
| 日期 | Y | 1-31 | , - * ? / L W |
| 月份 | Y | 1-12 或者 JAN-DEC | , - * / |
| 星期 | Y | 1-7 或者 SUN-SAT | , - * ? / L # |
| 年份 | N | 空 或者 1970-2199 | , - * / |
二、特殊字符說明
*:用來指定所有值。例如,如果元素分鐘為“*”,那么就表示每一分鐘;
?:用來表示無指定值。只有日期和星期這兩個(gè)元素可以使用“?”。當(dāng)你想要指定這兩個(gè)元素中的一個(gè)元素的值時(shí)非常有用,因?yàn)?/span>日期和星期不能同時(shí)設(shè)值。例如,如果想在某個(gè)月特定的一天(比如10號(hào))觸發(fā),但是不管那一天是星期幾,則可以將元素日期的值設(shè)置為“10”,元素星期的值設(shè)置為“?”;
-:用來指定范圍內(nèi)的值。例如,元素小時(shí)為“10-12”,則表示10點(diǎn)、11點(diǎn)、12點(diǎn);
,: 用來分隔一個(gè)元素的多個(gè)值。例如,元素星期為"MON,WED,FRI",則表示周一、周三和周五;
/:用來表示增量。例如,元素秒為“0/15”,則表示第0秒, 15秒,30秒以及45秒。 元素秒為“5/15”, 則表示”第5秒,20秒,35秒以及50秒”。 在"/"前指定“*”等價(jià)于在"/"前指定0作為起始值。對(duì)于表達(dá)式的每個(gè)元素都有數(shù)字范圍,具體參見表1-1,"/"只是在給定值范圍內(nèi)每隔N觸發(fā)。因此請(qǐng)?zhí)貏e注意,月份為"7/6",表示僅在7月份觸發(fā),并不是每6個(gè)月觸發(fā)一次。斜杠前的數(shù)字表示起始值,后面的數(shù)字表示增量。
L:只能用于“日期”和“星期”這兩個(gè)元素。這個(gè)字符是“last”的縮寫,但是對(duì)于這兩個(gè)不同的元素,有著不同的含義。例如,對(duì)于日期元素,值“L”代表“這個(gè)月的最后一天”——1月份是31號(hào),閏年的二月份是28號(hào)。如果“L”用于星期元素,則簡(jiǎn)單的表示“7”或者“SAT”;但是如果它跟在數(shù)字后面用于星期元素,則表示“這個(gè)月最后的XXX天”——例如“6L”或者“FRIL”都表示“這個(gè)月最后一個(gè)星期五”。你也可以從某個(gè)月的最后一天指定一個(gè)偏移量,例如“L-3”表示歷月的倒數(shù)第3天。 注意,當(dāng)使用選項(xiàng)“L”時(shí),不要指定列表值或者范圍值,否則結(jié)果會(huì)讓你比較困惑。
W:用來指定離給定日期最近的工作日(星期一至星期五),只能用于日期元素。例如,15W,則表示離這個(gè)月15號(hào)最近的工作日。如果15號(hào)是星期六,那么觸發(fā)器將會(huì)在14號(hào)星期五觸發(fā)。如果15號(hào)是星期天,那么觸發(fā)器將會(huì)在16號(hào)星期一觸發(fā)。如果15號(hào)是星期二,那么它將在15號(hào)星期二觸發(fā)。然而如果你指定“日期”元素的值為“1W”,并且1號(hào)是星期六,觸發(fā)器將在3號(hào)星期一觸發(fā),它不會(huì)跨躍一個(gè)月的天數(shù)邊界。只有當(dāng)日期是單一的一天才能指定“W”,而不能是一個(gè)日期范圍或者列表。
#:只能用于元素星期。該字符用來指定這個(gè)月第N個(gè)星期X。例如“6#3”,它表示這個(gè)月第三個(gè)星期五(6 =星期五,"#3" =這個(gè)月第三個(gè))。再如,“2#1”表示這個(gè)月第一個(gè)星期一, "4#5"表示這個(gè)月第五個(gè)星期四。注意如果你指定"#5"并且這個(gè)月沒有5個(gè)給定的星期,那么這個(gè)月將不會(huì)觸發(fā)。如果使用字符'#',元素星期只能使用一個(gè)表達(dá)式("3#1,6#3" 是無效的,因?yàn)橛袃蓚€(gè)表達(dá)式)。#前面的數(shù)字代表星期幾,后面的數(shù)字表示是第幾個(gè)。
三、配置示例
下面是CRON表達(dá)式的一些配置示例:
| 表達(dá)式 | 含義 |
| 0 0 12 * * ? | 每天中午12:00觸發(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:00到2:59,每分鐘觸發(fā)一次 |
| 0 0/5 14 * * ? | 每天,從下午2:00到2:55,每五分鐘觸發(fā)一次 |
| 0 0/5 14,18 * * ? | 每天,從下午2:00到2:55,每五分鐘觸發(fā)一次,并且從下午6:00到6:55,每五分鐘觸發(fā)一次 |
| 0 0-5 14 * * ? | 每天,從下午2:00到2:05,每分鐘觸發(fā)一次 |
| 0 10,44 14 ? 3 WED | 三月份的每個(gè)星期三的下午2:10和下午2:44觸發(fā) |
| 0 15 10 ? * MON-FRI | 從星期一到星期五每天上午10:15觸發(fā) |
| 0 15 10 15 * ? | 每個(gè)月15號(hào)上午10:15觸發(fā) |
| 0 15 10 L * ? | 每個(gè)月最后一天上午10:15觸發(fā) |
| 0 15 10 ? * 6L | 每個(gè)月最后一個(gè)星期五上午10:15觸發(fā) |
| 0 15 10 ? * 6L 2002-2005 | 2002, 2003, 2004以及2005年的每個(gè)月最后一個(gè)星期五上午10:15觸發(fā) |
| 0 15 10 ? * 6#3 | 每個(gè)月第三個(gè)星期五的上午10:15觸發(fā) |
| 0 0 12 1/5 * ? | 每個(gè)月從第一天中午12:00開始,每5天觸發(fā)一次 |
| 0 11 11 11 11 ? | 每年11月11日上午11:11觸發(fā) |
| 0 0 23-7/2,8 * * ? | 晚上11點(diǎn)到早上8點(diǎn)之間每?jī)蓚€(gè)小時(shí)觸發(fā)一次,早上八點(diǎn)觸發(fā)一次 |
?
四、注意事項(xiàng)
1、 本文檔基于Quartz 2.2.X。
2、 支持范圍溢出,即左邊的值比右邊的值大。例如,可以使用“22-2”來表示當(dāng)天
晚上10點(diǎn)到第二天凌晨2點(diǎn), 或者也可以使用“NOV-FEB”。過度使用范圍溢出來創(chuàng)建范圍沒有任何意義。
轉(zhuǎn)載于:https://my.oschina.net/jackieyeah/blog/182091
超強(qiáng)干貨來襲 云風(fēng)專訪:近40年碼齡,通宵達(dá)旦的技術(shù)人生總結(jié)
以上是生活随笔為你收集整理的Spring Cron Expression的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: golang小程序试验(二)
- 下一篇: gradle idea java ssm