在使用
jdk的timer
時發現無法滿足開發需求;即無法在指定的日期進行執行任務。
這便引入乙個優秀的開源任務排程框架「
quartz」。
這裡加入的是quartz-1.8.6版本。quart
的官網:
專案中的框架的
spring
是spring 3.0
版本無法整合
quartz 2.x
及其後續版本;所以這裡用
quartz 1.8.6
版本。
關於在spring中使用quartz,可以在spring文件中檢視,spring4.0.4文件說,只spring3.2以後只支援quartz2.+。
在spring
中整合quartz進行任務排程;首先將需要用到的
jar包引入專案的
lib目錄下:
「org.springframework.context.support-3.0.2.release.jar」:此包是spring
根據quartz
中的主要類進行再次封裝成具有
bean
風格的類
「quartz-1.8.6.jar」:quartz
的核心包
要在spring
中利用quartz
排程任務;需要配置三個
bean1、制定任務資訊 bean
package com.intsmaze.quartz;
public class quartztask
public void docrontriggertask()
}
1、 jobdetail 任務詳細資訊;包括呼叫哪個類;類中的哪個方法;執行時是否可並行執行任務。
value
="false">
2、 trigger 任務排程觸發器;主要用於定義
jobdetail
什麼時候執行。
觸發器最常用的有兩種:簡單觸發器
******trigger
和任務觸發器
crontrigger
。******trigger
和jdk
的timer
類似,只能指定任務執行以什麼樣的頻率執行,但無法制定精確的執行時間。
crontrigger
則既可以執行簡單觸發器所制定的以頻率來執行的時間,也可以制定複雜的時間計畫來執行。如可制定:每個月的最後一天的
15點來執行相關任務。
3、 schedule***ctory 任務排程工廠;用於排程各個任務觸發器。
啟動spring容器,就會自動執行任務排程了。
crontrigger中的
cronexpression
表示式屬性中接收的內容:
在表示式中時間格式間用空格隔開,每個時間表示:秒 分鐘 小時 日 月 周 年(
可選填)
日和周不能同時出現,因為會不一致導致錯誤。
可出現的值和符合:
'*' 字元可以用於所有字段,在「分」欄位中設為
"*"表示
"每一分鐘
"的含義。
'?' 字元可以用在「日」和「週幾」字段
. 它用來指定
'不明確的值
'. 這在你需要指定這兩個欄位中的某乙個值而不是另外乙個的時候會被用到。在後面的例子中可以看到其含義。
'-' 字元被用來指定乙個值的範圍,比如在「小時」欄位中設為
"10-12"
表示"10
點到12點".
',' 字元指定數個值。比如在「週幾」欄位中設為
"mon,wed,fri"
表示"the days monday, wednesday, and friday".
'/' 字元用來指定乙個值的的增加幅度
. 比如在「秒」欄位中設定為
"0/15"表示"
第0, 15, 30,
和 45秒"
。而 "5/15"
則表示"
第5, 20, 35,
和 50".
在'/'
前加"*"
字元相當於指定從
0秒開始
. 每個欄位都有一系列可以開始或結束的數值。對於「秒」和「分」字段來說,其數值範圍為0到
59,對於「小時」字段來說其為0到
23,
對於「日」字段來說為0到
31,
而對於「月」字段來說為1到
12。"/"字段僅僅只是幫助你在允許的數值範圍內從開始"第
n"的值。 因此對於「月」字段來說
"7/6"
只是表示
7月被開啟而不是「每六個月」
, 請注意其中微妙的差別。
'l'字元可用在「日」和「週幾」這兩個字段。它是
"last"
的縮寫,
但是在這兩個欄位中有不同的含義。例如
,「日」欄位中的
"l"表示
"乙個月中的最後一天
" —— 對於一月就是
31號對於二月來說就是
28號(非閏年)。而在「週幾」欄位中
, 它簡單的表示
"7" or "sat"
,但是如果在「週幾」欄位中使用時跟在某個數字之後
, 它表示
"該月最後乙個星期×
" —— 比如
"6l"表示"
該月最後乙個周五
"。當使用
'l'選項時
,指定確定的列表或者範圍非常重要,否則你會被結果搞糊塗的。
'w' 可用於「日」字段。用來指定歷給定日期最近的工作日
(周一到周五
) 。比如你將「日」欄位設為
"15w"
,意為: "
離該月15
號最近的工作日
"。因此如果
15號為週六,觸發器會在
14號即周五呼叫。如果
15號為週日
, 觸發器會在
16號也就是周一觸發。如果
15號為周二
,那麼當天就會觸發。然而如果你將「日」欄位設為
"1w",
而一號又是週六
, 觸發器會於下周一也就是當月的
3號觸發
,因為它不會越過當月的值的範圍邊界。
'w'字元只能用於「日」欄位的值為單獨的一天而不是一系列值的時候。
'l'和
'w'可以組合用於「日」字段表示為
'lw'
,意為"
該月最後乙個工作日"。
'#' 字元可用於「週幾」字段。該字元表示「該月第幾個周×」,比如
"6#3"
表示該月第三個周五
( 6表示周五而
"#3"
該月第三個
)。再比如
: "2#1" =
表示該月第乙個周一而
"4#5" =
該月第五個週三。注意如果你指定
"#5"
該月沒有第五個「周×」,該月是不會觸發的。
'c' 字元可用於「日」和「週幾」字段,它是
"calendar"
的縮寫。它表示為基於相關的日曆所計算出的值(如果有的話)。如果沒有關聯的日曆
, 那它等同於包含全部日曆。「日」字段值為
"5c"表示"
日曆中的第一天或者
5號及其以後
",「週幾」字段值為
"1c"
則表示"
日曆中的第一天或者週日及其以後"。
對於「月份」欄位和「週幾」字段來說合法的字元都不是大小寫敏感的。
任務排程器 Quartz
開發過程中需要用到定時任務,記錄一下配置過程 1 目標bean timingjob class com.quartz.timing.timingjobservice bean 2 jobdetail 排程任務 timingtrigger class org.springframework.sched...
spring任務排程器quartz
時間引數配置列表 關於cronexpression表示式,這裡講解一下 字段 允許值 允許的特殊字元 秒 0 59 分 0 59 小時 0 23 日期 1 31 l w c 月份 1 12 或者 jan dec 星期 1 7 或者 sun sat l c 年 可選 留空,1970 2099 表示式意...
任務排程 Quartz
首先,quartz是什麼 先看看我們生活中的例子 每月的2月21號提醒我今天是男朋友的生日 每月的17號提醒我大姨媽快要來了 每隔一小時提醒我起來走走運動運動 就是在某乙個有規律的時間點乾某件事。並且時間的觸發的條件可以非常複雜 比如每月最後乙個工作日的17 50 複雜到需要乙個專門的框架來幹這個事...