spring 容器啟動執行重置定時任務

2021-08-21 03:40:54 字數 1322 閱讀 1194

對於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...