一、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...