一. 在配置文件中设置线程池的参数
#线程池的配置
task:
pool:
corePoolSize: 10 #设置核心线程数
maxPoolSize: 20 #设置最大线程数
keepAliveTime: 300 #空闲线程存活时间
queueCapacity: 100 #队列容量
threadNamePrefix: "-signpolicy-asynnotify" #线程名前缀
awaitTerminationSeconds: 60 #设置线程池等待终止时间
二. 读取配置文件中的参数
@Data
@ConfigurationProperties(prefix = "task.pool")
public class TaskThreadPoolConfig {
private Integer corePoolSize = 10;
private Integer maxPoolSize = 20;
private Integer keepAliveTime = 300;
private Integer queueCapacity = 100;
private Integer awaitTerminationSeconds = 60 ;
private String threadNamePrefix = "-signpolicy-asynnotify";
}
三. 创建自定义线程池
@Configuration
public class AsyncThreadPoolScheduledTaskConfig {
@Autowired
private TaskThreadPoolConfig taskThreadPoolConfig;
//创建并配置线程池
@Bean("customAsyncThreadPool")
public Executor customAsyncThreadPool(){
ThreadPoolTaskExecutor taskExecutor = new ThreadPoolTaskExecutor();
//最大线程数
taskExecutor.setMaxPoolSize(taskThreadPoolConfig.getMaxPoolSize());
//核心线程数
taskExecutor.setCorePoolSize(taskThreadPoolConfig.getCorePoolSize());
//队列容量
taskExecutor.setQueueCapacity(taskThreadPoolConfig.getQueueCapacity());
//线程名前缀
taskExecutor.setThreadNamePrefix(taskThreadPoolConfig.getThreadNamePrefix());
// 允许线程的空闲时间
taskExecutor.setKeepAliveSeconds(taskThreadPoolConfig.getKeepAliveTime());
//设置线程池关闭的时候等待其他的任务都执行结束
taskExecutor.setWaitForTasksToCompleteOnShutdown(true);
taskExecutor.setAwaitTerminationSeconds(taskThreadPoolConfig.getKeepAliveTime());
//拒绝策略
taskExecutor.setRejectedExecutionHandler(new ThreadPoolExecutor.AbortPolicy());
return taskExecutor;
}
}