用quartz進行定時任務的開發

某天突然遇到頭疼的問題,定時任務怎麼搞?Java貌似都得經過觸發才能被訪問到執行邏輯。還好閒的蛋疼的人有的是,有個叫quartz的框架很好用,不僅可以定時,還可以設置多久執行一次,幾點到幾點之間多久運行一次。強大了一匹,下面就我自己開發的東西總結一下。


1.準備quartz的包,網上down一個就行,在項目中buildPath

2.寫一個你要執行的邏輯類


@Component
public class InterfaceReadTimeQuartz{

	public void readTimes() {
		//需要定時執行的邏輯
		
	}

}

3.配置xml,我在這就把bean主要的部分貼出來,照着這樣寫就行,放在beans節點下面

readTimes定時執行類裏面的哪個方法
		*/15 * * * * ?0 1 0 * * ?0 09 16 * * ?
但是千萬要注意的一件事就是配置的beans的xsi:schemaLocation裏記得要加上這兩個地址

http://www.springframework.org/schema/task
        http://www.springframework.org/schema/task/spring-task-4.0.xsd

因爲我沒加所以沒好使


4.把xml文件配置到web.xml中。我比較懶所以把bean的xml直接放spring的配置文件下了。如果需要的直接去看看sping是怎麼配在web.xml裏怎麼初始化的吧。


5.之前考慮到系統現在都是分佈式的,放在了三個服務器上同時執行會不會出問題,quartz本身就有這樣的機制


集羣分佈式併發環境中使用QUARTZ定時任務調度,會在各個節點會上報任務,存到數據庫中,執行時會從數據庫中取出觸發器來執行,如果觸發器的名稱和執行時間相同,則只有一個節點去執行此任務。 
如果此節點執行失敗,則此任務則會被分派到另一節點執行,中途也會自動檢查失效的定時調度,發現不成功的,其他節點立馬接過來繼續完成定時任務。對應的定時任務調度表比較多,有11個。(這段話抄的,我明白咋回事就說不出來)


我親身試驗放在了兩臺機器,兩臺機器都分別執行了,分了時間的先後。這個還沒有具體研究清楚,不過在邏輯當中控制好數據的正確性,quartz分佈式沒什麼問題,如果不行的話最好部一個單獨定時的服務器,以接口的形式進行訪問。


暫時就想到這麼多

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章