1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253 |
- package cn.cslg.pas.common.config;
- import org.springframework.aop.interceptor.AsyncUncaughtExceptionHandler;
- import org.springframework.context.annotation.Bean;
- import org.springframework.context.annotation.Configuration;
- import org.springframework.core.task.AsyncTaskExecutor;
- import org.springframework.scheduling.annotation.AsyncConfigurer;
- import org.springframework.scheduling.annotation.EnableAsync;
- import org.springframework.scheduling.concurrent.ThreadPoolTaskExecutor;
- import java.util.concurrent.Executor;
- import java.util.concurrent.ThreadPoolExecutor;
- @EnableAsync
- @Configuration
- public class AsyncTaskPoolConfig implements AsyncConfigurer {
- @Bean("singleThreadAsyncTaskExecutor")
- public AsyncTaskExecutor singleThreadAsyncTaskExecutor() {
- ThreadPoolTaskExecutor executor = new ThreadPoolTaskExecutor();
- executor.setCorePoolSize(1);
- executor.setMaxPoolSize(1);
- executor.setQueueCapacity(64);
- executor.setRejectedExecutionHandler(new ThreadPoolExecutor.CallerRunsPolicy());
- executor.initialize();
- return executor;
- }
- @Override
- public Executor getAsyncExecutor() {
- ThreadPoolTaskExecutor executor = new ThreadPoolTaskExecutor();
- //配置核心线程数
- executor.setCorePoolSize(8);
- //配置最大线程数
- executor.setMaxPoolSize(16);
- //配置队列大小
- executor.setQueueCapacity(64);
- //配置线程池中的线程的名称前缀
- executor.setThreadNamePrefix("async-service-");
- // 设置拒绝策略:当pool已经达到max size的时候,如何处理新任务
- // CALLER_RUNS:不在新线程中执行任务,而是有调用者所在的线程来执行
- executor.setRejectedExecutionHandler(new ThreadPoolExecutor.CallerRunsPolicy());
- //执行初始化
- executor.initialize();
- return executor;
- }
- @Override
- public AsyncUncaughtExceptionHandler getAsyncUncaughtExceptionHandler() {
- return new AsyncExceptionHandler();
- }
- }
|