From 2e5018dc1a0fe6304737966b9515758f8c1f9614 Mon Sep 17 00:00:00 2001 From: Stormeye Wu Date: Thu, 25 Apr 2019 18:04:41 +0800 Subject: [PATCH] =?UTF-8?q?[=E7=BA=BF=E7=A8=8B][=E4=BF=AE=E6=94=B9]:?= =?UTF-8?q?=E7=BA=BF=E7=A8=8B=E6=B1=A0=E9=99=90=E5=AE=9A=E5=A4=A7=E5=B0=8F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../java/com/iformall/config/AsyncConfig.java | 56 +++++++++++++++++++ 1 file changed, 56 insertions(+) create mode 100644 mlWechatOpen/src/main/java/com/iformall/config/AsyncConfig.java diff --git a/mlWechatOpen/src/main/java/com/iformall/config/AsyncConfig.java b/mlWechatOpen/src/main/java/com/iformall/config/AsyncConfig.java new file mode 100644 index 0000000..10a93a9 --- /dev/null +++ b/mlWechatOpen/src/main/java/com/iformall/config/AsyncConfig.java @@ -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); + } + }; + } +}