spring中使用@schedule進行任務調度時遇到的坑


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;
    }
}

創建一個線程池,這樣調度任務就會使用不同的線程去執行,相互影響就降低了


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM