参考:【Spring】定时任务@Scheduled多线程问题_scheduled 多线程-CSDN博客
spring的@Scheduled默认采用单线程调度,可以配合配置TaskScheduler来使用多线程。
还可以使用@Async("normalTaskExecutor") 通过异步线程隔离的方法,把不重要的任务指定到另一个线程池中执行,通过线程做隔离。
@Bean public TaskScheduler taskScheduler() {
ThreadPoolTaskScheduler scheduler = new ThreadPoolTaskScheduler(); scheduler.setPoolSize(50);
scheduler.setThreadNamePrefix("TaskScheduler-");
scheduler.setAwaitTerminationSeconds(10); scheduler.setWaitForTasksToCompleteOnShutdown(true);
return scheduler;
}
@Configuration
public class TaskConfig {
@Bean(name = "normalTaskExecutor")
public Executor normalTaskExecutor() {
ThreadPoolTaskExecutor executor = new ThreadPoolTaskExecutor();
executor.setCorePoolSize(5);
executor.setMaxPoolSize(10);
executor.setQueueCapacity(100);
executor.setThreadNamePrefix("normalTaskExecutor-");
executor.initialize();
return executor;
}
}