以下配置可以完美解决同一时间触发定时任务,在实际执行中存在时间差的问题:
比如:
@Scheduled(cron = "0 0/10 * * * ?")
public void task1(){
log.info("task1 started");
........
}
@Scheduled(cron = "0 0/10 * * * ?")
public void task2(){
log.info("task2 started");
........
}
如果task1执行任务时间较长的话,会发现“task2 started”的日志输出时间不是完全在每个10分钟的时间点,会出现延后的情况
是因为定时任务会根据任务执行线程池来执行,Spring中默认配置的线程池数量是1,所以会出现上面的情况
通过在项目中增加以下配置,增加任务执行线程池数量来提升并发执行能力:
@Bean
public TaskScheduler taskScheduler() {
ThreadPoolTaskScheduler taskScheduler = new ThreadPoolTaskScheduler();
taskScheduler.setPoolSize(50);
return taskScheduler;
}