cron表示式相關知識點

2021-08-07 13:22:58 字數 2780 閱讀 5997

一、cron表示式:

cron表示式是乙個字串,字串以5或6個空格隔開,分為6或7個域,每乙個域代表乙個含義,cron有如下語法格式: 

秒 分 時 日 月 星期幾 年 (每位之間用空格隔開)

二、表示式每一位的範圍:

秒:有效範圍為0-59的整數;

分:有效範圍為0-59的整數;

小時:有效範圍為0-23的整數;

日:有效範圍為1-31的整數;

月:有效範圍為1-12的整數或jan-dec;

週幾:有效範圍為1-7的整數或sun-sat兩個範圍(注意:1表示星期天!如此類推!所以最好還是用英文縮寫比較好,畢竟週日表1不符合國人常識);

年:有效範圍為1970-2023年。

三、表示式中可以使用的特殊符號:

1. 「*」:表示匹配該域的任意值,可在cron表示式中任一位使用,假如在「分鐘」位使用*, 即表示每分鐘都會觸發事件。

2. 「?」:只能用在日和周幾的兩個位中使用。它也匹配域的任意值,但實際不會。因為

日和周幾這兩位會相互影響!例如想在每月的20日觸發排程,不管20日到底是星期幾,則只能使用如下寫法:

0 0 0 20 * ?

其中最後一位只能用?,而不能使用*,如果使用*表示不管星期幾都會觸發,實際上並不是這樣。 

3. 「-」:表示範圍,可在表示式中任一位使用,例如在分鐘位使用5-20,表示從5分到20分鐘每分鐘觸發一次。

4. 「/」:表示起始時間開始觸發,然後每隔固定時間觸發一次,可在任一位中使用,例如在分鐘位使用5/20,則意味著5分鐘觸發一次,而第25(5+20)分,第45(5+20+20)分等分別觸發一次。 

5. 「,」:表示列出列舉值值。例如:在分鐘位使用5,20,則意味著在5和20分每分鐘觸發一次。

6. 「l」:表示最後,只能出現在日和周幾這兩位,如果在周幾這一位使用5l,意味著在最後的乙個星期四觸發。

7. 「w」:表示有效工作日(周一到周五),只能出現在週幾這位,系統將在

離指定日期的最近的有效工作日觸發事件。例如:使用5w,如果5日是星期六,則將在最近的工作日:星期五,即4日觸發。如果5日是星期天,則在6日(周一)觸發;如果5日在星期一到星期五中的一天,則就在5日觸發。另外一點,w的最近尋找不會跨過月份(lw 這兩個字元可以連用,表示在某個月最後乙個工作日,即最後乙個星期五)。 

8. 「#」:用於確定每個月第幾個星期幾,只能出現在「週幾」這位。例如在4#2,表示某月的第二個星期三。

四、常用cron表示式示例:

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" 2023年的每天上午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" 2023年至2023年的每月的最後乙個星期五上午10:15觸發 

"0 15 10 ? * 6#3" 每月的第三個星期五上午10:15觸發

五、開發過程問題分享:

在開發過程中,需要用quartz做乙個每週一凌晨觸發的定時任務,開始的時候,觸發器配置成如下:

<

bean

id= "expansioncrontrigger"

class=

"org.springframework.scheduling.quartz.crontriggerbean"

>

<

property

name=

"jobdetail"

ref=

"expansionworksheetscheduler"

/>

<

property

name=

"cronexpression"

>

0/10 * 2-7 * * mon  

property

>

bean

>

測試的時候用的都是下面乙個表示式,故沒有測試出錯誤,上線的時候卻報錯,當時檢查了一遍表示式,又替換了下面乙個測試表示式執行,鎖定了問題在

0/10 * 2-7 * * mon

這個配置中,但是自己看了好久,沒有發現什麼問題(當時不知道「日」位與「週幾」位又特殊的注意事項)。

0/10 * 2-7 ? * mon

問題解決。

正規表示式知識點

re.match與re.search的區別 re.match只匹配字串的開始,如果字串開始不符合正規表示式,則匹配失敗,函式返回none 而re.search匹配整個字串,直到找到乙個匹配。flags 標誌位,用於控制正規表示式的匹配方式,如 是否區分大小寫,多行匹配等等 import re s 1...

正規表示式知識點

正則的知識點 1.建立例項 var reg new regexp pattern,flag d g 2.flag 識別符號 1.i 忽略大小寫匹配 2.m 多行匹配 3.g 全域性匹配 應用與所有,而不是找到第乙個就停止 3.第一段知識點 1.xyz xyz中任意乙個字元 等價於 x z 2.xyz...

正規表示式知識點總結

1.正規表示式 符合一定規則的表示式。2.作用 用於專門操作字串。3.特點 用一些特定的符號來表示一些 操作,這樣可以簡化書寫。所以學習正規表示式,就是在學習一些特殊符號的使用。4.好處 可以簡化對字串的複雜操作。5.弊端 符號定義越多,正則越長,閱讀性越差。1.匹配 boolean matches...