基於Spring實現定時調度

比較常用的是,Spring對Quartz的支持,可以非常容易地進行定時任務的調度。一般,具有兩種方式實現定時調度:

一種是通過繼承Spring的org.springframework.scheduling.quartz.QuartzJobBean來定義定時任務,這種情況下與Spring代碼有一定耦合。下面,通過例子來說明:

實現一個定時任務類,代碼如下所示:

上面的JobExecutionContext context是一個任務執行上下文,可以通過配置,將需要的數據傳遞給executeInternal方法,然後在該方法中定義任務的處理邏輯。

這裏,假設有一個類包含了對定時任務的控制信息,實現類爲JobControlInfo,形式化定義如下所示:

通過Spring配置傳遞給JobExecutionContext context。

Spring配置文件quartz.xml的內容,如下所示:

下面可以啓動定時任務了,代碼如下所示:

我們定義這個定時任務,執行時間間隔爲2s。

 

另一種是完全與Spring代碼解耦合,而只是通過Spring配置就能進行定時任務的配置,一個定時任務可以是任意的Java處理類。而對於定時的配置,是基於Unix系統的crontab命令來實現的,更加靈活地配置定時任務。

下面說明實現方法:

定義一個普通的Java類,裏面的一個方法裏面包含了定時任務的處理邏輯,如下所示:

然後看下Spring配置文件quartz.xml內容:

通過Spring的org.springframework.scheduling.quartz.MethodInvokingJobDetailFactoryBean來設置目標定時任務處理內容,如處理類和處理方法,通過org.springframework.scheduling.quartz.CronTriggerBean的cronExpression屬性來配置定時任務,非常靈活。

上述配置,定時任務會自動調用MyQuartzJob類的scan方法來執行任務。

對於cronExpression屬性的值,包括以下7 個字段:

有關各個字段可以設置的值,我們引用http://www.ibm.com/developerworks/cn/java/j-quartz/index.html的內容:

更多信息可以查閱相關資料。

啓動定時任務,測試代碼如下所示:

發佈了73 篇原創文章 · 獲贊 19 · 訪問量 110萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章