spring定時器定時任務到時間未執行
應用場景
一個定時器類中有n個定時任務,有每30秒執行一次的還有每1分鐘執行一次的,出現問題的定時任務是0點整時執行的定時任務到了0點沒有執行。
原因分析
spring定時器任務scheduled-tasks默認配置是單線程串行執行的,當某個定時任務出現阻塞,或者執行時間過長,則線程就會被占用,其他定時任務排隊執行,導致后面的定時任務未能準時執行。
解決方式
開啟多線程定時任務執行
1
2
3
4
5
6
7
8
9
10
11
|
/** * 多線程執行定時任務 */ @Configurable public class ScheduleConfig implements SchedulingConfigurer { private static final int FIVE = 5 ; @Override public void configureTasks(ScheduledTaskRegistrar scheduledTaskRegistrar) { scheduledTaskRegistrar.setScheduler(Executors.newScheduledThreadPool(FIVE)); } } |
解決修改系統時間后Spring 定時任務不執行
問題描述
Spring 定時任務不執行
事情起因是這樣的,我們有一個spring定時任務,每隔半小時要執行一次。
起因
由于種種原因,昨晚上這臺服務器被關機了,今早【重啟服務器】和【啟動定時任務服務】。
機器重啟后,發現服務器機器系統時間和實際北京時間不一致,相差10個小時。
于是乎,我使用date -s 10:35:35 設置和北京時間保持一致。
錯誤
本以為這樣,時間已經一致了,定時任務應該能正常執行了!
等了好幾個小時,定時任務依然沒有執行。
于是查看系統日志,系統日志一切正常,只是沒有定時任務執行的log日志。
解決問題
奇了個怪,服務正常啟動,但定時任務沒有執行。
然而昨天還在跑的服務,就因為一次關機,就over了?
不可能,于是關掉應用服務再次重啟。
定時任務執行成功了,于是得出結論: 服務器系統時間改變后,Spring 定時任務將失效。
服務器系統時間改變后,Spring 定時任務將失效,解決方法就是:重啟應用服務。
以上為個人經驗,希望能給大家一個參考,也希望大家多多支持服務器之家。
原文鏈接:https://blog.csdn.net/weixin_42518062/article/details/103599656