QuartZ Cron表達式解析:Cron表達式由7個部分組成,每個部分使用空格隔開。表達式中的七個部分從左到右代表的含義如下:
秒 分 時 日(每月中的一天)月 日(每周中的一天) 年
具體參數如表1 QuartZ Cron參數表所示。
表1 QuartZ Cron參數表
名稱 | 是否必填 | 可選數值 | 可選特殊符号 |
秒 | 是 | 數字0-59。 | , - * / |
分 | 是 | 數字0-59。 | , - * / |
時 | 是 | 數字0-23。 | , - * / |
日(每月中的一天) | 是 | 數字1-31。注意2月沒有30日和31日,4月、6月、9月、11月沒有31日。 | , - * ? / L W C |
月 | 是 | 數字0-11,或字元串。 | , - * / |
日(每周中的一天) | 是 | 數字1-7,或字元串。 | , - * ? / L C # |
年 | 否 | 數字1970-2099。 | , - * ? / L W C |
QuartZ Cron表達式中的月份可以填寫數字或者字元串。如果您想在月份參數中填寫1月,數字“0”或字元串“JAN”都符合QuartZ Cron表達式的約定。具體數字與字元串如何對應請參考表2 月份數字與字元串對應表。
表2 月份數字與字元串對應表
數字 | 字元串 |
JAN | |
1 | FEB |
2 | MAR |
3 | APR |
4 | MAY |
5 | JUN |
6 | JUL |
7 | AUG |
8 | SEP |
9 | OCT |
10 | NOV |
11 | DEC |
QuartZ Cron表達式中的日(每周中的一天)可以填寫數字或者字元串。如果您想在此參數中填寫周一,數字“2”或字元串“MON”都符合QuartZ Cron表達式的約定。具體數字與字元串如何對應請參考表3。QuartZ Cron表達式約定周六為每周的最後一天。
表3 每周數字與字元串對應表
數字 | 字元串 | 含義 |
1 | SUN | 周日 |
2 | MON | 周一 |
3 | TUE | 周二 |
4 | WED | 周三 |
5 | THU | 周四 |
6 | FRI | 周五 |
7 | SAT | 周六 |
注意事項
每一個參數都使用數字,但還可以出現如下特殊字元,它們的含義是:
- *:表示比對該域的任意值。假如在“分”使用“*”,即表示每分鐘都會觸發事件。
- ?:隻能用在“日(每月中的一天)”和“日(每周中的一天)”兩個參數中。它也比對參數的任意值,但實際不會。因為“日(每月中的一天)”和“日(每周中的一天)”會互相影響。例如想在每月的20日觸發排程,不管20日是星期幾,則隻能使用如下寫法: 13 13 15 20 * ?,其中最後一位隻能用“?”,而不能使用“*”,如果使用“*”表示不管星期幾都會觸發,實際上并不是這樣。
- -:表示範圍。例如在“分”使用“5-20”,表示從5分到20分鐘每分鐘觸發一次。
- /:表示起始時間開始觸發,然後每隔固定時間觸發一次。例如在“分”使用“5/20”,則表示每小時的第5、25、45分鐘分别觸發定時任務。
- ,:表示列出枚舉值。例如:在“分”使用“5,20”,則表示在每小時的5和20分之間,每分鐘觸發一次定時任務。
- L:表示最後,隻能出現在“日(每月中的一天)”和“日(每周中的一天)”參數中。如果在“日(每周中的一天)”域使用“5L”表示在最後的一個星期四觸發。
- W:表示有效工作日(周一到周五),隻能出現在“日(每月中的一天)”參數中,系統将在離指定日期的最近的有效工作日觸發事件。例如:在 “日(每月中的一天)”使用“5W”,如果5日是星期六,則将在最近的工作日:星期五,即4日觸發。如果5日是星期天,則在6日(周一)觸發;如果5日在星期一到星期五中的一天,則就在5日觸發。W的最近尋找不會跨過月份 。
- LW:這兩個字元可以連用,表示在某個月最後一個工作日,即最後一個星期五。
- #:用于确定每個月第幾個星期幾,隻能出現在“日(每月中的一天)”域。例如在4#2,表示某月的第二個星期三。
示例
以下示例将幫助您更好地了解QuartZ Cron表達式的含義。簡單示例展示了QuartZ Cron表達式的初級使用方法。常用示例則展示了QuartZ Cron表達式在實際場景中常見的使用方法,您隻需根據實際需求對常用示例進行微調即可将其投入使用。
簡單示例:
0/5 * * * * ? //每隔五秒執行一次
0 0/1 * * * ? //每隔一分鐘執行一次
0 0 23 * * ? //每天23點執行一次
0 0 1 1 * ? //每月一号淩晨1點執行一次
0 0 23 L * ? //每月最後一天23點執行一次
0 33,55 * * * ? //在33分,55分執行一次
0 0 18 * * LW //每月最後一個工作日晚上六點執行一次
0 15 10 * * ? 2019 //2019年的每天上午10:15執行一次。
0 0 12 * * ? //每天中午12點執行一次 。
0 * 14 * * ? //在每天下午2點到下午2:59期間的每1分鐘執行一次 。
0 0/30 9-17 * * ? //朝九晚五工作時間内每半小時執行一次。
0 0 12 ? * WED //每個星期三中午12點執行一次。
0 0/30 9-17 * * MON-FRI //周一到周五,早上9點至下午五點期間,每半小時執行一次。
0 15 10 ? * MON-FRI //周一到周五每天上午10:15執行一次。
0 0 2 1 * ? //在每月的1日的淩晨2點調執行一次。
0 15 10 ? * 6#3 //每月的第三個星期五上午10:15執行一次。
0 15 10 ? * 6L //每月的最後一個星期五上午10:15執行一次。
0 30 08 ? 7L 2018-2020 //2018-2020年的每個月的最後一個星期六上午8:30執行一次。
0 15 10 ? 6L 2002-2006 //2002-2006年的每個月的最後一個星期五上午10:15執行一次。