spring是在開發中使用比較廣泛的開發套件,開箱即用,很是方便,比如在開發定時任務時,只需要使用@Schedule就可以輕松配置,簡直不要很方便,但是如果開發了很多定時任務,而且有的定時任務執行時間比較長,如果沒有設置線程池,可能會出現定時任務執行時間和實際指定的時間不一致的問題,下面是我們遇到的問題
1.問題現象
開發了20多個定時任務,在測試環境執行都是正常,偏偏到了生產環境出現執行時間和實際指定時間不在同一節奏,導致執行錯亂
2.分析原因
看了日志,所有定時任務日志都是同一個線程
頓時發現問題所在,spring定時任務默認使用的是單線程調度的,所有很多定時任務排隊執行,時間就錯亂了,如果有任務卡死,那其他任務就別想執行了
3.解決方式
@Configuration @EnableAsync public class ScheduleConfig { @Bean public TaskScheduler taskScheduler() { ThreadPoolTaskScheduler taskScheduler = new ThreadPoolTaskScheduler(); //計划任務線程池,每來一個任務創一個線程,直至線程池滿 taskScheduler.setPoolSize(10); return taskScheduler; } }
創建一個線程池,這樣調度任務就會使用不同的線程去執行,相互影響就降低了