對於quartz定時任務,需要自定義設定cron表示式實現修改定時任務的執行週期。
定時任務是在spring容器啟動完畢通過@eventlistener監聽容器的contextrefreshedevent事件讀取了quarz.properties檔案中cron 表示式更新了定時任務觸發器。
使用者在修改了定時任務的cron表示式的時候,存放在了資料庫中,所以需要從資料庫中獲取cron,然後重置觸發器。這個操作希望在spring容器啟動的時候做。
考慮使用@postconstruct來做,這個操作在@eventlistener之前,可以修改定時任務的註解,從而更新定時任務的觸發器cron。
@postconstruct
public void resetcron(contextrefreshedevent event) catch (exception e)
}}
考慮使用 @eventlistener的方式,監聽容器的contextrefreshedevent事件,讀取資料庫資料,重置定時任務觸發器
@eventlistener
public void resetcron(contextrefreshedevent event)
system.out
.println("執行的任務 end ");
string key = "jmsdatasyncjob" + "." + "sysnolddata"
; trigger trigger = triggerbuilder.newtrigger().withidentity(key)
.withschedule(cronschedulebuilder.cronschedule(cron))
.build();
quartzmanageservice.reschedulejob(triggerkey.triggerkey(key), trigger);
} catch (exception e)
}}
問題:和quartz一樣都是監聽容器的重新整理事件,會導致執行順序問題,如果查資料庫重置的操作在quartz之前就會導致最終定時任務的cron還是讀取的配置檔案裡面的。所以考慮監聽其他的事件,保證在後面執行。
@eventlistener
public
void
resetcron(contextreadyevent event)
操作成功。
spring容器啟動事件監聽:
[參考連線]
spring容器以及Spring啟動過程
beanfactory介面包含以下幾個基本方法 boolean containbean string name 判斷spring容器是否包含id為name的bean例項。getbean classrequiredtypr 獲取spring容器中屬於requiredtype型別的唯一的bean例項。o...
Spring容器啟動中XML解析
上篇文章介紹了spring容器啟動主要流程,本篇主要針對spring啟動中xml載入過程細化說明 在上面介紹的節奏中,知道該 configurablelistablebeanfactory beanfactory obtainfreshbeanfactory 函式專門用來處理xml解析,並且解析成g...
Spring容器啟動耗時很長(卡住不動)
原因 xsi schemalocation 中配置的 xsd 版本與專案中的版本不一致。1.在spring啟動是讀取xml時,會載入xsd對xml進行校驗。2.預設情況下是載入本地的xsd檔案 如下圖 xsd檔案一般是儲存在對應的jar包裡。3.版本不一致,上圖中jms的xsd版本只有2.5 3.0...