javascript
Spring定时器corn表达式
每當使用Spring定時器時,每次設置時間都要去百度一次或者到處找原來的配置,很少麻煩。就決定學習下。
以下是官網的原話和例子:
The pattern is a list of six single space-separated fields: representing second, minute, hour, day, month, weekday. Month and weekday names can be given as the first three letters of the English names.
(該模式是六個以空格分隔的字符組成的列表:代表秒,分,時,日,月,周。周的名稱可以作為英文名在前三個字母給出)
Example patterns:
- "0 0 * * * *" = the top of every hour of every day(每天整點執行).
- "*/10 * * * * *" = every ten seconds(每十秒執行).
- "0 0 8-10 * * *" = 8, 9 and 10 o'clock of every day(每天8點到10點執行).
- "0 0 6,19 * * *" = 6:00 AM and 7:00 PM every day(每天6點到19點執行).
- "0 0/30 8-10 * * *" = 8:00, 8:30, 9:00, 9:30, 10:00 and 10:30 every day(每8點到10點,半小時執行一次).
- "0 0 9-17 * * MON-FRI" = on the hour nine-to-five weekdays(每周的工作日9點到17點執行)
- "0 0 0 25 12 ?" = every Christmas Day at midnight(每年12月15日的0點執行,也就是圣誕節)
所以,表達式的順序應該是 秒-分-時-日-月-年,按最小從左邊開始排列。順序了解后,就需要繼續了解例子中??* / , ??這一些標點符號的意義了(這里參考了百度百科的https://baike.baidu.com/item/cron/10952601?fr=aladdin):
(1)*:表示匹配該域的任意值,即在秒的位置就每秒,在分的位置就每分......
(2)?:只能用在DayofMonth(月)和DayofWeek(周)兩個域。比如要每個月的20號執行,則寫為13 13 15 20 * *, 但是不應該這樣寫的。月和周互相影響。每個月20號的周幾是不一樣的,所以這個?的用法就出來了,用著相互影響的點。13 13 15 20 * ?
(3)-:表示范圍,參考上面例子,0 0 8-10 * * *,代表8點到10點。
(4)/:表示起始時間開始觸發,然后每隔固定時間觸發一次,例如在Minutes5/20,則意味著5分鐘觸發一次,而25,45等分別觸發一次.
(5),:逗號表示列出枚舉值值。例如:在Minutes域使用5,20,則意味著在第5和第20分鐘分別觸發一次。
(6)L:表示最后,只能出現在DayofWeek和DayofMonth域,如果在DayofWeek域使用5L,意味著在最后的一個星期四觸發。這里5是表示星期四,6表示星期五
(7)W:表示有效工作日(周一到周五),只能出現在DayofMonth域,系統將在離指定日期的最近的有效工作日觸發事件。例如:在 DayofMonth使用5W,如果5日是星期六,則將在最近的工作日:星期五,即4日觸發。如果5日是星期天,則在6日(周一)觸發;如果5日在星期一到星期五中的一天,則就在5日觸發。另外一點,W的最近尋找不會跨過月份
(8)LW:這兩個字符可以連用,表示在某個月最后一個工作日,即最后一個非周六周末的日期。
(9)#:用于確定每個月第幾個星期幾,只能出現在DayofWeek域。例如在4#2,表示某月的第二個星期三。
?
一些例子:
0 */1 * * * ? 每分鐘執行
0 0 2 1 * ? * 表示在每月的1日的凌晨2點調度任務
0 15 10 ? * MON-FRI 表示周一到周五每天上午10:15執行作業
0 15 10 ? * 6L 2002-2006 表示2002-2006年的每個月的最后一個星期五上午10:15執行作
0 0 10,14,16 * * ? 每天上午10點,下午2點,4點
0 0/30 9-17 * * ? 朝九晚五工作時間內每半小時
0 0 12 ? * WED 表示每個星期三中午12點
"0 0 12 * * ?" 每天中午12點觸發
"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點到下午2:59期間的每1分鐘觸發
"0 0/5 14 * * ?" 在每天下午2點到下午2:55期間的每5分鐘觸發
"0 0/5 14,18 * * ?" 在每天下午2點到2:55期間和下午6點到6:55期間的每5分鐘觸發
"0 0-5 14 * * ?" 在每天下午2點到下午2:05期間的每1分鐘觸發
"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年至2005年的每月的最后一個星期五上午10:15觸發
"0 15 10 ? * 6#3" 每月的第三個星期五上午10:15觸發
?
這里有個地方要注意: corn表達式并不是一定就是6位,也有些寫成7位的。第7位是年,只不過可以為空的。
?
總結
以上是生活随笔為你收集整理的Spring定时器corn表达式的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: cron风格定时器_QuartzCron
- 下一篇: Spring定时器的时间表达式 定时器的