package com.mes.common.config;
|
|
import org.springframework.context.annotation.Bean;
|
import org.springframework.context.annotation.Configuration;
|
import org.springframework.core.task.TaskExecutor;
|
import org.springframework.scheduling.annotation.EnableAsync;
|
import org.springframework.scheduling.concurrent.ThreadPoolTaskExecutor;
|
|
import java.util.concurrent.ThreadPoolExecutor;
|
|
/**
|
* <p> @Title AsyncTaskExecutorConfig
|
* <p> @Description 异步线程池配置
|
*
|
* @author ACGkaka
|
* @date 2023/4/24 19:48
|
*/
|
@EnableAsync
|
@Configuration
|
public class AsyncTaskExecutorConfig {
|
|
/**
|
* 核心线程数(线程池维护线程的最小数量)
|
*/
|
private int corePoolSize = 10;
|
/**
|
* 最大线程数(线程池维护线程的最大数量)
|
*/
|
private int maxPoolSize = 200;
|
/**
|
* 队列最大长度
|
*/
|
private int queueCapacity = 10;
|
|
@Bean
|
public TaskExecutor taskExecutor() {
|
ThreadPoolTaskExecutor executor = new ThreadPoolTaskExecutor();
|
executor.setCorePoolSize(corePoolSize);
|
executor.setMaxPoolSize(maxPoolSize);
|
executor.setQueueCapacity(queueCapacity);
|
executor.setThreadNamePrefix("MyExecutor-");
|
// for passing in request scope context 转换请求范围的上下文
|
// executor.setTaskDecorator(new ContextCopyingDecorator());
|
// rejection-policy:当pool已经达到max size的时候,如何处理新任务
|
// CALLER_RUNS:不在新线程中执行任务,而是有调用者所在的线程来执行
|
executor.setRejectedExecutionHandler(new ThreadPoolExecutor.CallerRunsPolicy());
|
executor.setWaitForTasksToCompleteOnShutdown(true);
|
executor.initialize();
|
return executor;
|
}
|
}
|