对比新文件 |
| | |
| | | package com.gk.firework.Config.ThreadExecutor; |
| | | import org.slf4j.Logger; |
| | | import org.slf4j.LoggerFactory; |
| | | import org.springframework.aop.interceptor.AsyncUncaughtExceptionHandler; |
| | | import org.springframework.beans.factory.annotation.Value; |
| | | import org.springframework.context.annotation.Bean; |
| | | import org.springframework.context.annotation.Configuration; |
| | | import org.springframework.scheduling.annotation.AsyncConfigurer; |
| | | import org.springframework.scheduling.annotation.EnableAsync; |
| | | import org.springframework.scheduling.concurrent.ThreadPoolTaskExecutor; |
| | | |
| | | |
| | | import java.lang.reflect.Method; |
| | | import java.util.concurrent.Executor; |
| | | |
| | | import java.util.concurrent.ThreadPoolExecutor; |
| | | |
| | | @Configuration |
| | | @EnableAsync |
| | | public class ExecutorConfig implements AsyncConfigurer { |
| | | private Logger logger = LoggerFactory.getLogger(ExecutorConfig.class); |
| | | |
| | | /** |
| | | * 最小线程数(核心线程数) |
| | | */ |
| | | @Value("${threadPool.corePoolSize}") |
| | | private int corePoolSize; |
| | | /** |
| | | * 最大线程数 |
| | | */ |
| | | @Value("${threadPool.maxPoolSize}") |
| | | private int maxPoolSize; |
| | | /** |
| | | * 等待队列(队列最大长度) |
| | | */ |
| | | @Value("${threadPool.queueCapacity}") |
| | | private int queueCapacity; |
| | | |
| | | |
| | | @Bean(name = "SocketTaskExecutor") |
| | | public Executor asyncServiceExecutor() { |
| | | logger.info("start asyncServiceExecutor"); |
| | | |
| | | ThreadPoolTaskExecutor executor = new ThreadPoolTaskExecutor(); |
| | | //配置核心线程数 |
| | | executor.setCorePoolSize(corePoolSize); |
| | | //配置最大线程数 |
| | | executor.setMaxPoolSize(maxPoolSize); |
| | | //配置队列大小 |
| | | executor.setQueueCapacity(queueCapacity); |
| | | //配置线程池中的线程的名称前缀 |
| | | executor.setThreadNamePrefix("async-service-"); |
| | | // rejection-policy:当pool已经达到max size的时候,如何处理新任务 |
| | | // CALLER_RUNS:不在新线程中执行任务,而是有调用者所在的线程来执行 |
| | | executor.setRejectedExecutionHandler(new ThreadPoolExecutor.CallerRunsPolicy()); |
| | | |
| | | //执行初始化 |
| | | executor.initialize(); |
| | | return executor; |
| | | } |
| | | |
| | | /** |
| | | * 异步异常处理 |
| | | * |
| | | * @return |
| | | */ |
| | | @Override |
| | | public AsyncUncaughtExceptionHandler getAsyncUncaughtExceptionHandler() { |
| | | return new SpringAsyncExceptionHandler(); |
| | | } |
| | | |
| | | class SpringAsyncExceptionHandler implements AsyncUncaughtExceptionHandler { |
| | | @Override |
| | | public void handleUncaughtException(Throwable throwable, Method method, Object... obj) { |
| | | logger.error("Exception occurs in async method", throwable.getMessage()); |
| | | } |
| | | } |
| | | |
| | | |
| | | } |