Spring中多线程定时计划任务

img

可以将@Scheduled任务交给线程池进行处理。在Spring Boot中,可以通过以下两种方式来将@Scheduled任务加入线程池:

使用@EnableScheduling + @Configuration配置ThreadPoolTaskScheduler

1
2
3
4
5
6
7
8
9
10
11
@Configuration
@EnableScheduling
public class TaskSchedulerConfig {
@Bean
public TaskScheduler taskScheduler() {
ThreadPoolTaskScheduler scheduler = new ThreadPoolTaskScheduler();
scheduler.setPoolSize(10);
scheduler.initialize();
return scheduler;
}
}

在上述代码中,我们通过配置ThreadPoolTaskScheduler来创建一个线程池,并使用@EnableScheduling注解将定时任务开启。其中,setPoolSize方法可以设置线程池的大小,默认为1。

使用ThreadPoolTaskExecutor

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15

@Configuration
@EnableScheduling
public class TaskExecutorConfig {
@Bean
public ThreadPoolTaskExecutor taskExecutor() {
ThreadPoolTaskExecutor executor = new ThreadPoolTaskExecutor();
executor.setCorePoolSize(10);
executor.setMaxPoolSize(50);
executor.setQueueCapacity(1000);
executor.setKeepAliveSeconds(60);
executor.setThreadNamePrefix("task-executor-");
return executor;
}
}

在上述代码中,我们通过配置ThreadPoolTaskExecutor来创建一个线程池,并使用@EnableScheduling注解将定时任务开启。其中setCorePoolSize、setMaxPoolSize、setQueueCapacity、setKeepAliveSeconds等方法可以用于配置线程池的大小和任务队列等参数。