Spring中多线程定时计划任务
Linus Jhon
可以将@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等方法可以用于配置线程池的大小和任务队列等参数。