如果是单线程执行,A节点执行1、2、3、4任务,B节点执行4、3、2、1任务,4个任务在A、 B节点定时相同,各任务执行时间短,即使加了分布式锁,也会发生1个任务在两个节点各执行了一次。可以加入线程池,或者4个任务不设置同一个定时执行。
转载:
@Scheduled为springboott集成了一个定时调度。@Scheduled注解的定时任务是单线程的,同一时间段内只能执行一个定时任务,其它定时任务不执行。
为解决同一时间无法执行多任务,可以通过配置类,同时启动类添加注解@EnableScheduling。
@Configuration
public class ScheduledConfig {
@Bean
public TaskScheduler taskScheduler() {
ThreadPoolTaskScheduler taskScheduler = new ThreadPoolTaskScheduler();
taskScheduler.setPoolSize(20);
return taskScheduler;
}
}
也可以将@Bean相关内容放置在启动类中。