spring定時器定時任務到時間未執(zhí)行問題的解決
spring定時器定時任務到時間未執(zhí)行
應用場景
一個定時器類中有n個定時任務,有每30秒執(zhí)行一次的還有每1分鐘執(zhí)行一次的,出現(xiàn)問題的定時任務是0點整時執(zhí)行的定時任務到了0點沒有執(zhí)行。
原因分析
spring定時器任務scheduled-tasks默認配置是單線程串行執(zhí)行的,當某個定時任務出現(xiàn)阻塞,或者執(zhí)行時間過長,則線程就會被占用,其他定時任務排隊執(zhí)行,導致后面的定時任務未能準時執(zhí)行。
解決方式
開啟多線程定時任務執(zhí)行
/** * 多線程執(zhí)行定時任務 */ @Configurable public class ScheduleConfig implements SchedulingConfigurer { private static final int FIVE = 5; @Override public void configureTasks(ScheduledTaskRegistrar scheduledTaskRegistrar) { scheduledTaskRegistrar.setScheduler(Executors.newScheduledThreadPool(FIVE)); } }
解決修改系統(tǒng)時間后Spring 定時任務不執(zhí)行
問題描述
Spring 定時任務不執(zhí)行
事情起因是這樣的,我們有一個spring定時任務,每隔半小時要執(zhí)行一次。
起因
由于種種原因,昨晚上這臺服務器被關機了,今早【重啟服務器】和【啟動定時任務服務】。
機器重啟后,發(fā)現(xiàn)服務器機器系統(tǒng)時間和實際北京時間不一致,相差10個小時。
于是乎,我使用date -s 10:35:35 設置和北京時間保持一致。
錯誤
本以為這樣,時間已經(jīng)一致了,定時任務應該能正常執(zhí)行了!
等了好幾個小時,定時任務依然沒有執(zhí)行。
于是查看系統(tǒng)日志,系統(tǒng)日志一切正常,只是沒有定時任務執(zhí)行的log日志。
解決問題
奇了個怪,服務正常啟動,但定時任務沒有執(zhí)行。
然而昨天還在跑的服務,就因為一次關機,就over了?
不可能,于是關掉應用服務再次重啟。
定時任務執(zhí)行成功了,于是得出結論: 服務器系統(tǒng)時間改變后,Spring 定時任務將失效。
服務器系統(tǒng)時間改變后,Spring 定時任務將失效,解決方法就是:重啟應用服務。
以上為個人經(jīng)驗,希望能給大家一個參考,也希望大家多多支持腳本之家。
相關文章
Springboot ApplicationRunner的使用解讀
這篇文章主要介紹了Springboot ApplicationRunner的使用解讀,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2023-05-05springcloud如何獲取網(wǎng)關封裝的頭部信息
這篇文章主要介紹了springcloud獲取網(wǎng)關封裝的頭部信息,本文通過實例代碼給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下2022-06-06springmvc使用REST出現(xiàn):Request?method?'PUT'?not?sup
這篇文章主要介紹了springmvc使用REST出現(xiàn):Request?method?'PUT'?not?supported問題及解決方案,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2022-02-02SpringBoot實現(xiàn)多數(shù)據(jù)源的實戰(zhàn)案例
這篇文章主要介紹了SpringBoot實現(xiàn)多數(shù)據(jù)源的實戰(zhàn)案例,文中通過示例代碼和圖文展示介紹的非常詳細,對大家的學習或工作有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習吧2024-01-01