在Spring中使用Quartz進行任務排程 1

2021-06-09 12:58:22 字數 1514 閱讀 8913

概述

各種企業應用幾乎都會碰到任務排程的需求,就拿論壇來說:每隔半個小時生成精華文章的rss檔案,每天凌晨統計論壇使用者的積分排名,每隔30分鐘執行鎖定使用者解鎖任務。對於乙個典型的mis系統來說,在每月1號凌晨統計上個月各部門的業務資料生成月報表,每半個小時查詢使用者是否已經有快到期的待處理業務……,這樣的例子俯拾皆是,不勝列舉。

quartz 在開源任務排程框架中的翹首,它提供了強大任務排程機制,難能可貴的是它同時保持了使用的簡單性。quartz 允許開發人員靈活地定義觸發器的排程時間表,並可以對觸發器和任務進行關聯對映。此外,quartz提供了排程執行環境的持久化機制,可以儲存並恢復排程現場,即使系統因故障關閉,任務排程現場資料並不會丟失。此外,quartz還提供了元件式的偵聽器、各種外掛程式、執行緒池等功能。

spring為建立quartz的scheduler、trigger和jobdetail提供了便利的factorybean類,以便能夠在spring 容器中享受注入的好處。此外spring還提供了一些便利工具類直接將spring中的bean包裝成合法的任務。spring進一步降低了使用quartz的難度,能以更具spring風格的方式使用quartz。概括來說它提供了兩方面的支援:

1)為quartz的重要元件類提供更具bean風格的擴充套件類;

2)提供建立scheduler的beanfactory類,方便在spring環境下建立對應的元件物件,並結合spring容器生命週期進行啟動和停止的動作。

建立jobdetail

你可以直接使用quartz的jobdetail在spring中配置乙個jobdetail bean,但是jobdetail使用帶參的建構函式,對於習慣通過屬性配置的spring使用者來說存在使用上的不便。為此spring通過擴充套件jobdetail提供了乙個更具bean風格的jobdetailbean。此外,spring提供了乙個methodinvokingjobdetailfactorybean,通過這個factorybean可以將spring容器中bean的方法包裝成quartz任務,這樣開發者就不必為job建立對應的類。

jobdetailbean

jobdetailbean擴充套件於quartz的jobdetail。使用該bean宣告jobdetail時,bean的名字即是任務的名字,如果沒有指定所屬組,即使用預設組。除了jobdetail中的屬性外,還定義了以下屬性:

● jobclass:型別為class,實現job介面的任務類;

● beanname:預設為bean的id名,通過該屬性顯式指定bean名稱,它對應任務的名稱;

● jobdataasmap:型別為map,為任務所對應的jobdatamap提供值。之所以需要提供這個屬性,是因為除非你手工註冊一 個編輯器,你不能直接配置jobdatamap型別的值,所以spring通過jobdataasmap設定jobdatamap的值;

●joblistenernames:型別為string,指定註冊在scheduler中的joblisteners名稱,以便讓這些***對本任務的事件進行監聽。

在spring中使用quartz

好吧!我承認我對quartz並不熟悉,這種境況需要通過學習它,使用它去改變。先記錄下最進在spring中使用quartz的經驗。spring中提供了對quartz的支援,使得在spring使用quartz變得很容易,只需要在配置檔案中進行配置就行了。當然在路徑中要加入相應的jar包,我用的是quar...

在Spring中使用JMS

spring對jms進行封裝,使用起來更簡單。以下給出範例 供參考!在spring中可以用jmstemplate物件來傳送 接收訊息。1 連線工廠 在非web ejb容器中使用pool時,要手動stop,spring不會為你執行destroy method的方法。如果使用了pooledconnect...

在普通類中使用Spring注入

在編寫工具類 提供方法的時候由於要注入service層,在編寫的時候發現service層類注入失敗,由於普通類不是通過spring進行管理的,所有注入service會失敗。所以可以採用下面的方法。springtool需要加到spring配置中,如果採用自動掃瞄需要將springtool宣告為元件。新...