cron表示式
quartz使用類似於linux下的cron表示式定義時間規則,cron表示式由6或7個由空格分隔的時間字段組成,如表1所示:
位置時間網域名稱
允許值允許的特殊字元1秒
0-59
,- * /2分鐘
0-59
, - * /3小時
0-23
, - * /4日期
1-31
, - * ? / l w c5月份
1-12
, - * /6星期
1-7, - * ? / l c #
7年(可選)
空值1970-2099
, - * /
cron表示式的時間欄位除允許設定數值外,還可使用一些特殊的字元,提供列表、範圍、萬用字元等功能,細說如下:
●星號(*):可用在所有欄位中,表示對應時間域的每乙個時刻,例如,*在分鐘欄位時,表示「每分鐘」;
●問號(?):該字元只在日期和星期欄位中使用,它通常指定為「無意義的值」,相當於點位符;
●減號(-):表達乙個範圍,如在小時欄位中使用「10-12」,則表示從10到12點,即10,11,12;
●逗號(,):表達乙個列表值,如在星期欄位中使用「mon,wed,fri」,則表示星期一,星期三和星期五;
●斜槓(/):x/y表達乙個等步長序列,x為起始值,y為增量步長值。如在分鐘欄位中使用0/15,則表示為0,15,30和45秒,而5/15在分鐘欄位中表示5,20,35,50,你也可以使用*/y,它等同於0/y;
●l:該字元只在日期和星期欄位中使用,代表「last」的意思,但它在兩個欄位中意思不同。l在日期欄位中,表示這個月份的最後一天,如一月的31號,非閏年二月的28號;如果l用在星期中,則表示星期六,等同於7。但是,如果l出現在星期 欄位裡,而且在前面有乙個數值x,則表示「這個月的最後x天」,例如,6l表示該月的最後星期五;
●w:該字元只能出現在日期欄位裡,是對前導日期的修飾,表示離該日期最近的工作日。例如 15w表示離該月15號最近的工作日,如果該月15號是星期六,則匹配14號星期五;如果15日是星期日,則匹配16號星期一;如果15號是星期二,那結 果就是15號星期二。但必須注意關聯的匹配日期不能夠跨月,如你指定1w,如果1號是星期六,結果匹配的是3號星期一,而非上個月最後的那天。w字串只 能指定單一日期,而不能指定日期範圍;
●lw組合:在日期字段可以組合使用lw,它的意思是當月的最後乙個工作日;
●井號(#):該字元只能在星期欄位中使用,表示當月某個工作日。如6#3表示當月的第三個星期五(6表示星期五,#3表示當前的第三個),而4#5表示當月的第五個星期三,假設當月沒有第五個星期三,忽略不觸發;
● c:該字元只在日期和星期欄位中使用,代表「calendar」的意思。它的意思是計畫所關聯的日期,如果日期沒有被關聯,則相當於日曆中所有日期。例如5c在日期欄位中就相當於日曆5日以後的第一天。1c在星期欄位中相當於星期日後的第一天。
cron表示式對特殊字元的大小寫不敏感,對代表星期的縮寫英文大小寫也不敏感。
表2下面給出一些完整的cron表示式的例項:
表示式說明
"0 0 12 * * ? "
每天12點執行
"0 15 10 ? * *"
每天10:15執行
"0 15 10 * * ?"
每天10:15執行
"0 15 10 * * ? *"
每天10:15執行
"0 15 10 * * ? 2008"
在2023年的每天10:15執行
"0 * 14 * * ?"
每天14點到15點之間每分鐘執行一次,開始於14:00,結束於14:59。
"0 0/5 14 * * ?"
每天14點到15點每5分鐘執行一次,開始於14:00,結束於14:55。
"0 0/5 14,18 * * ?"
每天14點到15點每5分鐘執行一次,此外每天18點到19點每5鐘也執行一次。
"0 0-5 14 * * ?"
每天14:00點到14:05,每分鐘執行一次。
"0 10,44 14 ? 3 wed"
3月每週三的14:10分到14: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 2007-2009"
在2007,2008,2023年每個月的最後乙個星期五的10:15分執行。
"0 15 10 ? * 6#3"
每月第三個星期五的10:15分執行。
quartz是利用cron表示式來定義任務啟動的時間。
乙個cron表示式有至少6個(也可能7個)有空格分隔的時間元素。
如0 0 10,14 * * ? 2006.從左到右,這些元素的定義如下:
1.秒(0-59)
2.分鐘(0-59)
3.小時(0-23)
4.月份中的日期(1-31)
5.月份(1-12或jan-dec)
6.星期中的日期(1-7或sun-sat)
7.年份(1970-2099)
其中每個元素可以是乙個值(如6),乙個連續區間(9-12),乙個間隔時間(8-18/4)(/表示每隔4小時),乙個列表(1,3,5),萬用字元。由於"月份中的日期"和"星期中的日期"這兩個元素互斥的,必須要對其中乙個設定?.
0 0 10,14,16 * * ? 每天上午10點,下午2點,4點
0 0/30 9-17 * * ? 朝九晚五工作時間內每半小時
表示式舉例:
"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觸發
0 6 * * * 每天早上6點
0 */2 * * * 每兩個小時
0 23-7/2,8 * * * 晚上11點到早上8點之間每兩個小時,早上八點
0 11 4 * 1-3 每個月的4號和每個禮拜的禮拜一到禮拜三的早上11點
0 4 1 1 * 1月1日早上4點
Quartz 作業排程
當你在應用程式需要作業排程的時候,使用quartz 作業排程可以解決你問題。步驟 2.做乙個類來管理各個job的排程,假設類名為quartzmanager summary description for quartzmanager public class quartzmanager 某個job p...
Quartz作業排程實踐
quartz的使用場景 例如 每5秒對某個平台傳輸資料 quartz框架的一些基礎概念解釋 scheduler 作業排程器。ijob 作業介面,繼承並實現execute,編寫執行的具體作業邏輯。jobbuilder 根據設定,生成乙個詳細作業資訊 jobdetail triggerbuilder 根...
spring裡quartz排程的連續觸發
作法是通過spring在執行的觸發器的 的裡面注入下乙個要執行的 例項,這 觸發這些則可以通過配置檔案進行配置。這是用於連續觸發的listener package com.sww.quartz.listeners import org.apache.log4j.logger import org.q...