quartz通過動態設置配置文件確實可以實現與數據庫的同步,但現實開發上線后我們基本是不會對配置文件等進行變動,因為重啟一次服務器所需的成本太多。
這時,就需要我們僅僅修改數據庫就能實現動態的更新定時任務的定時時間。但僅僅修改表qrtz_cron_triggers對應cronExpression並不能生效,原因在於表qrtz_triggers中的所有時間相關的值並沒有變動。
那么,如何做呢?
原本我想查看cronExpression表達式對應的各個時間段的計算規則,然后再進行相應的修改。結果發現這方法既沒找到對應的計算方法又很麻煩。
然后我想到如果將表qrtz_triggers中的下一次執行的時間NEXT_FIRE_TIME和上一次執行的時間PREV_FIRE_TIME值改為0,是不是可以解決?嘗試后發現確實可以,而且執行任務后對應的相關時間值都變成了表qrtz_cron_triggers當前cronExpression值對應的時間。
實現步驟:
1.更改表qrtz_cron_triggers的cronExpression
2.將表qrtz_triggers的NEXT_FIRE_TIME和PREV_FIRE_TIME的值改為0
友情提示:使用此法則不能實現配置文件同數據庫的同步,不然在執行定時任務前數據庫數據會同步成配置文件對應的值,那么修改數據庫也無法修改。