package com.nq.config; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import org.springframework.scheduling.TaskScheduler; 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.Executors; import java.util.concurrent.ThreadPoolExecutor; /** * spring boot 多线程并发定时任务 * 所有的任务都在同一个线程池但不同线程中完成 * @ClassName::ScheduleConfig * @author leon * @createDate 2018年10月15日 下午4:02:38 * @version v1.0 * @classRemarks TODO */ @Configuration public class ScheduleConfig implements SchedulingConfigurer { // @Autowired // ThreadPoolTaskExecutor threadPoolTaskExecutor; @Bean public TaskScheduler taskScheduler() { ThreadPoolTaskScheduler executor = new ThreadPoolTaskScheduler(); executor.setPoolSize(15); executor.setThreadNamePrefix("task-thread"); //设置饱和策略 //CallerRunsPolicy:线程池的饱和策略之一,当线程池使用饱和后,直接使用调用者所在的线程来执行任务;如果执行程序已关闭,则会丢弃该任务 executor.setRejectedExecutionHandler(new ThreadPoolExecutor.CallerRunsPolicy()); executor.initialize(); return executor; } @Override public void configureTasks(ScheduledTaskRegistrar taskRegistrar) { taskRegistrar.setScheduler(taskScheduler()); } }