某天突然遇到頭疼的問題,定時任務怎麼搞?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 * * ?
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分佈式沒什麼問題,如果不行的話最好部一個單獨定時的服務器,以接口的形式進行訪問。
暫時就想到這麼多