spring定時(shí)器定時(shí)任務(wù)到時(shí)間未執(zhí)行問題的解決
spring定時(shí)器定時(shí)任務(wù)到時(shí)間未執(zhí)行
應(yīng)用場(chǎng)景
一個(gè)定時(shí)器類中有n個(gè)定時(shí)任務(wù),有每30秒執(zhí)行一次的還有每1分鐘執(zhí)行一次的,出現(xiàn)問題的定時(shí)任務(wù)是0點(diǎn)整時(shí)執(zhí)行的定時(shí)任務(wù)到了0點(diǎn)沒有執(zhí)行。
原因分析
spring定時(shí)器任務(wù)scheduled-tasks默認(rèn)配置是單線程串行執(zhí)行的,當(dāng)某個(gè)定時(shí)任務(wù)出現(xiàn)阻塞,或者執(zhí)行時(shí)間過長,則線程就會(huì)被占用,其他定時(shí)任務(wù)排隊(duì)執(zhí)行,導(dǎo)致后面的定時(shí)任務(wù)未能準(zhǔn)時(shí)執(zhí)行。
解決方式
開啟多線程定時(shí)任務(wù)執(zhí)行
/** * 多線程執(zhí)行定時(shí)任務(wù) */ @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)時(shí)間后Spring 定時(shí)任務(wù)不執(zhí)行
問題描述
Spring 定時(shí)任務(wù)不執(zhí)行
事情起因是這樣的,我們有一個(gè)spring定時(shí)任務(wù),每隔半小時(shí)要執(zhí)行一次。
起因
由于種種原因,昨晚上這臺(tái)服務(wù)器被關(guān)機(jī)了,今早【重啟服務(wù)器】和【啟動(dòng)定時(shí)任務(wù)服務(wù)】。
機(jī)器重啟后,發(fā)現(xiàn)服務(wù)器機(jī)器系統(tǒng)時(shí)間和實(shí)際北京時(shí)間不一致,相差10個(gè)小時(shí)。
于是乎,我使用date -s 10:35:35 設(shè)置和北京時(shí)間保持一致。
錯(cuò)誤
本以為這樣,時(shí)間已經(jīng)一致了,定時(shí)任務(wù)應(yīng)該能正常執(zhí)行了!
等了好幾個(gè)小時(shí),定時(shí)任務(wù)依然沒有執(zhí)行。
于是查看系統(tǒng)日志,系統(tǒng)日志一切正常,只是沒有定時(shí)任務(wù)執(zhí)行的log日志。
解決問題
奇了個(gè)怪,服務(wù)正常啟動(dòng),但定時(shí)任務(wù)沒有執(zhí)行。
然而昨天還在跑的服務(wù),就因?yàn)橐淮侮P(guān)機(jī),就over了?
不可能,于是關(guān)掉應(yīng)用服務(wù)再次重啟。
定時(shí)任務(wù)執(zhí)行成功了,于是得出結(jié)論: 服務(wù)器系統(tǒng)時(shí)間改變后,Spring 定時(shí)任務(wù)將失效。
服務(wù)器系統(tǒng)時(shí)間改變后,Spring 定時(shí)任務(wù)將失效,解決方法就是:重啟應(yīng)用服務(wù)。
以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。
相關(guān)文章
Springboot ApplicationRunner的使用解讀
這篇文章主要介紹了Springboot ApplicationRunner的使用解讀,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2023-05-05springcloud如何獲取網(wǎng)關(guān)封裝的頭部信息
這篇文章主要介紹了springcloud獲取網(wǎng)關(guān)封裝的頭部信息,本文通過實(shí)例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2022-06-06Java8中的LocalDateTime你會(huì)使用了嗎
LocalDateTime?是?Java?8?中日期時(shí)間?API?提供的一個(gè)類,在日期和時(shí)間的表示上提供了更加豐富和靈活的支持,本文就來講講LocalDateTime的一些具體使用方法吧2023-05-05springmvc使用REST出現(xiàn):Request?method?'PUT'?not?sup
這篇文章主要介紹了springmvc使用REST出現(xiàn):Request?method?'PUT'?not?supported問題及解決方案,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2022-02-02SpringBoot實(shí)現(xiàn)多數(shù)據(jù)源的實(shí)戰(zhàn)案例
這篇文章主要介紹了SpringBoot實(shí)現(xiàn)多數(shù)據(jù)源的實(shí)戰(zhàn)案例,文中通過示例代碼和圖文展示介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)吧2024-01-01