Spring Boot 定時任務 Scheduled 中的cron表達式詳解

Cron 表達式

Cron 表達式是一個字符串, 分爲 6 或 7 個域, 每一個域代表一個含義。
Cron 有如下兩種語法格式:
(1) Seconds Minutes Hours Day Month Week Year
(2) Seconds Minutes Hours Day Month Week
在這裏插入圖片描述

Cron 表達式中的特殊字符

Cron 表達式的時間字段除允許設置數值外, 還可使用一些特殊的字符, 提供列表、 範圍、 通配符等功能。
●星號(*): 可用在所有字段中, 表示對應時間域的每一個時刻, 例如, 在分鐘字段時, 表示“每分鐘”;
●問號(?) : 該字符只在日期和星期字段中使用, 它通常指定爲“無意義的值”, 相當於佔位符;
●減號(-): 表達一個範圍, 如在小時字段中使用“10-12”, 則表示從 10 到 12 點, 即 10,11,12;
●逗號(,): 表達一個列表值, 如在星期字段中使用“MON,WED,FRI”, 則表示星期一, 星期三和星期五;
●斜槓(/): x/y 表達一個等步長序列, x 爲起始值, y 爲增量步長值。 如在分鐘字段中使用 0/15, 則表示爲 0,15,30 和 45 秒, 而 5/15 在分鐘字段中表示5,20,35,50, 你也可以使用
/y, 它等同於 0/y;
●L: 該字符只在日期和星期字段中使用, 代表“Last”的意思, 但它在兩個字段中意思不同。 L 在日期字段中, 表示這個月份的最後一天, 如一月的 31 號, 非閏年二月的 28 號; 如果 L 用在星期中, 則表示星期六, 等同於 7。 但是, 如果 L 出現在星期字段裏, 而且在前面有一個數值 X, 則表示“這個月的最後 X 天”,例如, 6L 表示該月的最後星期五;
●W: 該字符只能出現在日期字段裏, 是對前導日期的修飾, 表示離該日期最近的工作日。 例如 15W表示離該月 15 號最近的工作日, 如果該月 15 號是星期六, 則匹配 14 號星期五; 如果 15 日是星期日,則匹配 16 號星期一; 如果 15 號是星期二, 那結果就是 15 號星期二。 但必須注意關聯的匹配日期不能夠跨月, 如你指定 1W, 如果 1 號是星期六, 結果匹配的是 3 號星期一, 而非上個月最後的那天。 W 字符串只能指定單一日期, 而不能指定日期範圍;
●LW 組合: 在日期字段可以組合使用 LW, 它的意思是當月的最後一個工作日;
●井號(#): 該字符只能在星期字段中使用, 表示當月某個工作日。 如 6#3 表示當月的第三個星期五(6表示星期五, #3 表示當前的第三個), 而 4#5 表示當月的第五個星期三, 假設當月沒有第五個星期三,忽略不觸發;
● C: 該字符只在日期和星期字段中使用, 代表“Calendar”的意思。 它的意思是計劃所關聯的日期,如果日期沒有被關聯, 則相當於日曆中所有日期。 例如 5C 在日期字段中就相當於日曆 5 日以後的第一天。
1C 在星期字段中相當於星期日後的第一天。
Cron 表達式對特殊字符的大小寫不敏感, 對代表星期的縮寫英文大小寫也不敏感。
例子:
@Scheduled(cron = “0 0 1 1 1 ?”)//每年一月的一號的 1:00:00 執行一次
@Scheduled(cron = “0 0 1 1 1,6 ?”) //一月和六月的一號的 1:00:00 執行一次
@Scheduled(cron = “0 0 1 1 1,4,7,10 ?”) //每個季度的第一個月的一號的 1:00:00 執行一次
@Scheduled(cron = “0 0 1 1 * ?”)//每月一號 1:00:00 執行一次
@Scheduled(cron=“0 0 1 * * *”) //每天凌晨 1 點執行一次

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章