原文:https://blog.csdn.net/qq_35937303/article/details/88851064
現有兩個定時任務
@Component("aa") public class aa { @Scheduled(cron = "0 44 17 * * ?") public void bb() { try { System.out.println("aa執行時間:" + new Date()); Thread.sleep(65000); System.out.println("aa完成時間:" + new Date()); } catch (Exception e) { e.printStackTrace(); } } }
@Component("bb") public class bb { @Scheduled(cron = "0 55 17 * * ?") public void aa() { try { System.out.println("bb執行時間:" + new Date()); Thread.sleep(10000); System.out.println("bb完成時間:" + new Date()); } catch (Exception e) { e.printStackTrace(); } } }
默認的在啟動項加入@EnableScheduling注解就可以運行了
最終,執行的結果令人大跌眼鏡。
aa的任務由於執行時間需要65秒,超過了bb任務執行的時間,結果bb任務執行的時間被阻塞掉,延遲了5秒執行。
解決方法是在啟動項類中加入如下配置即可
@Bean public TaskScheduler taskScheduler() { ThreadPoolTaskScheduler taskScheduler = new ThreadPoolTaskScheduler(); taskScheduler.setPoolSize(50); return taskScheduler; }
如果是xml
<!-- 注解式 -->
<task:annotation-driven executor="myExecutor" scheduler="myScheduler"/>
<task:executor id="myExecutor" pool-size="5"/>
<task:scheduler id="myScheduler" pool-size="10"/>