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());
|
}
|
}
|