天天看點

定時任務參數配置

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 周六

注意事項

每一個參數都使用數字,但還可以出現如下特殊字元,它們的含義是:

  1. *:表示比對該域的任意值。假如在“分”使用“*”,即表示每分鐘都會觸發事件。
  2. ?:隻能用在“日(每月中的一天)”和“日(每周中的一天)”兩個參數中。它也比對參數的任意值,但實際不會。因為“日(每月中的一天)”和“日(每周中的一天)”會互相影響。例如想在每月的20日觸發排程,不管20日是星期幾,則隻能使用如下寫法: 13 13 15 20 * ?,其中最後一位隻能用“?”,而不能使用“*”,如果使用“*”表示不管星期幾都會觸發,實際上并不是這樣。
  3. -:表示範圍。例如在“分”使用“5-20”,表示從5分到20分鐘每分鐘觸發一次。
  4. /:表示起始時間開始觸發,然後每隔固定時間觸發一次。例如在“分”使用“5/20”,則表示每小時的第5、25、45分鐘分别觸發定時任務。
  5. ,:表示列出枚舉值。例如:在“分”使用“5,20”,則表示在每小時的5和20分之間,每分鐘觸發一次定時任務。
  6. L:表示最後,隻能出現在“日(每月中的一天)”和“日(每周中的一天)”參數中。如果在“日(每周中的一天)”域使用“5L”表示在最後的一個星期四觸發。
  7. W:表示有效工作日(周一到周五),隻能出現在“日(每月中的一天)”參數中,系統将在離指定日期的最近的有效工作日觸發事件。例如:在 “日(每月中的一天)”使用“5W”,如果5日是星期六,則将在最近的工作日:星期五,即4日觸發。如果5日是星期天,則在6日(周一)觸發;如果5日在星期一到星期五中的一天,則就在5日觸發。W的最近尋找不會跨過月份 。
  8. LW:這兩個字元可以連用,表示在某個月最後一個工作日,即最後一個星期五。
  9. #:用于确定每個月第幾個星期幾,隻能出現在“日(每月中的一天)”域。例如在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執行一次。