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