最近项目中有使用到通过自定义线程池来执行定时任务操作的配置,特此记录便于日后查阅。
package com.xxx.iot.message.restapi.config; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import org.springframework.scheduling.annotation.EnableScheduling; import org.springframework.scheduling.annotation.SchedulingConfigurer; import org.springframework.scheduling.concurrent.ThreadPoolTaskExecutor; import org.springframework.scheduling.concurrent.ThreadPoolTaskScheduler; import org.springframework.scheduling.config.ScheduledTaskRegistrar; import java.util.concurrent.ThreadPoolExecutor; /** * @author zhangzhixiang on 2022/8/10 */ @Configuration @EnableScheduling public class ThreadPoolConfig implements SchedulingConfigurer { /** * 定时任务使用的线程池 * @return */ @Bean(destroyMethod = "shutdown", name = "taskScheduler") public ThreadPoolTaskScheduler taskScheduler(){ ThreadPoolTaskScheduler scheduler = new ThreadPoolTaskScheduler(); scheduler.setPoolSize(3); scheduler.setThreadNamePrefix("timer-thread"); scheduler.setAwaitTerminationSeconds(600); scheduler.setWaitForTasksToCompleteOnShutdown(true); return scheduler; } @Override public void configureTasks(ScheduledTaskRegistrar scheduledTaskRegistrar) { scheduledTaskRegistrar.setTaskScheduler(taskScheduler()); } }
到此SpringBoot 自定义ThreadPoolTaskScheduler线程池执行定时任务操作介绍完成。