Spring中使用@Scheduled注解来实现定时任务,今天项目的定时任务不执行了,经排查是因为前面定时任务执行时间过长,导致后面的定时任务没有执行。上网查了下Spring默认是单线程执行定时任务,所以如果项目中存在多个或者时间间隔较短的定时任务,一旦正在执行的定时任务出现异常或者其他原因导致线程阻塞,则可能会出现部分定时任务不会按照指定的时间去执行,最终影响业务。
解决方法
加入定时任务线程池配置类,
@Configuration
public class ScheduledTaskConfiguration implements SchedulingConfigurer {
@Override
public void configureTasks(ScheduledTaskRegistrar taskRegistrar) {
final ThreadPoolTaskScheduler taskScheduler = new ThreadPoolTaskScheduler();
taskScheduler.setPoolSize(5);// 线程池大小
taskScheduler.initialize();
taskRegistrar.setTaskScheduler(taskScheduler);
}
}
日常记录下!!!