在實際的專案應用中常遇到定時執行某個任務,比如定時重新整理商品的狀態,定時更新token等等,定時任務在系統中的應用恨頻繁下面就簡單講解一下定時任務框架quartz 和 spring的整合。
public
class
testtask
}
execute
false
0 55 2 */28 * ?
配置完整格式為: [秒] [分] [小時] [日] [月] [周] [年]
序號 說明 是否必填 允許填寫的值 允許的萬用字元
1 秒 是 0-59 , - * /
2 分 是 0-59 , - * /
3 小時 是 0-23 , - * /
4 日 是 1-31 , - * ? / l w
5 月 是 1-12 or jan-dec , - * /
6 周 是 1-7 or sun-sat , - * ? / l #
7 年 否 empty 或 1970-2099 , - * /
「*」字元被用來指定所有的值。如:」*「在分鐘的字段域裡表示「每分鐘」。
「-」字元被用來指定乙個範圍。如:「10-12」在小時域意味著「10點、11點、12點」。
「,」字元被用來指定另外的值。如:「mon,wed,fri」在星期域裡表示」星期
一、星期
三、星期五」.
「?」字元只在日期域和星期域中使用。它被用來指定「非明確的值」。當你需要通過在這兩個域中的乙個來指定一些東西的時候,它是有用的。看下面的例子你就會明白。
「l」字元指定在月或者星期中的某天(最後一天)。即「last 」的縮寫。但是在星期和月中「l」表示不同的意思,如:在月子段中「l」指月份的最後一天-1月31日,2月28日,如果在星期欄位中則簡單的表示為「7」或者「sat」。如果在星期欄位中在某個value值得後面,則表示「某月的最後乙個星期value」,如「6l」表示某月的最後乙個星期五。
「w」字元只能用在月份欄位中,該欄位指定了離指定日期最近的那個星期日。
「#」字元只能用在星期字段,該欄位指定了第幾個星期value在某月中
乙個cron表示式有至少6個(也可能7個)有空格分隔的時間元素。按順序依次為1.秒(0~59)2.分鐘(0~59)3.小時(0~23)4.天(月)(0~31,但是你需要考慮你月的天數)5.月(0~11)6.天(星期)(1~7 1=sun 或 sun,mon,tue,wed,thu,fri,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 ? * wed 表示每個星期三中午12點
有些子表示式能包含一些範圍或列表例如:子表示式(天(星期))可以為 「mon-fri」,「mon,wed,fri」,「mon-wed,sat」
「*」字元代表所有可能的值因此,「*」在子表示式(月)裡表示每個月的含義,「*」在子表示式(天(星期))表示星期的每一天
「/」字元用來指定數值的增量例如:在子表示式(分鐘)裡的「0/15」表示從第0分鐘開始,每15分鐘 ;在子表示式(分鐘)裡的「3/20」表示從第3分鐘開始,每20分鐘(它和「3,23,43」)的含義一樣「?」字元僅被用於天(月)和天(星期)兩個子表示式,表示不指定值當2個子表示式其中之一被指定了值以後,為了避免衝突,需要將另乙個子表示式的值設為「?」
「l」 字元僅被用於天(月)和天(星期)兩個子表示式,它是單詞「last」的縮寫
但是它在兩個子表示式裡的含義是不同的。
在天(月)子表示式中,「l」表示乙個月的最後一天 ,在天(星期)自表示式中,「l」表示乙個星期的最後一天,也就是sat
如果在「l」前有具體的內容,它就具有其他的含義了
例如:「6l」表示這個月的倒數第6天,「fril」表示這個月的最後乙個星期五
注意:在使用「l」引數時,不要指定列表或範圍,因為這會導致問題
示例 :
"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 55 2 */28 * ? " 每過28天的2點55分觸發
很多時候要測試類似每過28天觸發定時任務這樣的長時間任務,不可能等28天再去測,這時候啟動工程後,修改系統的時間到28天之後即可驗證結果。 Quartz Spring 定時任務
專案結構 myjob就是我們要定時執行的任務 定時執行的任務 author hulujie public class myjob servlet context.xml配置 web.xml配置 org.springframework.web.context.contextloaderlistener...
定時任務元件Quartz Spring
org.quartz schedulergroupid quartzartifactid 2.2.3version dependency org.quartz schedulergroupid quartz jobsartifactid 2.2.1version dependency org.spr...
linux定時任務 at定時任務
at命令是一次性定時計畫任務,at的守護程序atd會以後臺模式執行,檢查作業佇列來執行作業。atd守護程序會檢查系統上的乙個特殊目錄來獲取at命令的提交的作業,預設情況下,atd守護程序每60秒檢查一次目錄,有作業時,會檢查作業執行時間,如果時間與當前時間匹配,則執行此作業。注意 at命令是一次性定...