| @@ -0,0 +1,56 @@ | |||||
| package com.iformall.config; | |||||
| import org.springframework.aop.interceptor.AsyncUncaughtExceptionHandler; | |||||
| import org.springframework.beans.factory.annotation.Value; | |||||
| import org.springframework.scheduling.annotation.AsyncConfigurer; | |||||
| import org.springframework.scheduling.concurrent.ThreadPoolTaskExecutor; | |||||
| import org.springframework.stereotype.Component; | |||||
| import org.slf4j.Logger; | |||||
| import org.slf4j.LoggerFactory; | |||||
| import java.lang.reflect.Method; | |||||
| import java.util.concurrent.Executor; | |||||
| import java.util.concurrent.ThreadPoolExecutor; | |||||
| @Component | |||||
| public class AsyncConfig implements AsyncConfigurer { | |||||
| private Logger logger = LoggerFactory.getLogger(getClass()); | |||||
| @Value("${thread.pool.corePoolSize:10}") | |||||
| private int corePoolSize; | |||||
| @Value("${thread.pool.maxPoolSize:20}") | |||||
| private int maxPoolSize; | |||||
| @Value("${thread.pool.keepAliveSeconds:4}") | |||||
| private int keepAliveSeconds; | |||||
| @Value("${thread.pool.queueCapacity:512}") | |||||
| private int queueCapacity; | |||||
| @Override | |||||
| public Executor getAsyncExecutor() { | |||||
| ThreadPoolTaskExecutor executor = new ThreadPoolTaskExecutor(); | |||||
| executor.setCorePoolSize(corePoolSize); | |||||
| executor.setMaxPoolSize(maxPoolSize); | |||||
| executor.setKeepAliveSeconds(keepAliveSeconds); | |||||
| executor.setQueueCapacity(queueCapacity); | |||||
| executor.setRejectedExecutionHandler((Runnable r, ThreadPoolExecutor exe) -> { | |||||
| logger.warn("当前任务线程池队列已满."); | |||||
| }); | |||||
| executor.initialize(); | |||||
| return executor; | |||||
| } | |||||
| @Override | |||||
| public AsyncUncaughtExceptionHandler getAsyncUncaughtExceptionHandler() { | |||||
| return new AsyncUncaughtExceptionHandler() { | |||||
| @Override | |||||
| public void handleUncaughtException(Throwable ex, Method method, Object... params) { | |||||
| logger.error("线程池执行任务发生未知异常.", ex); | |||||
| } | |||||
| }; | |||||
| } | |||||
| } | |||||