From 59e91a4e9ddaf23cebb12993c774aa899ab22d16 Mon Sep 17 00:00:00 2001
From: 郑永安 <zyazyz250@sina.com>
Date: 星期一, 19 六月 2023 14:22:45 +0800
Subject: [PATCH] 描述

---
 src/main/java/com/gk/firework/Config/ThreadExecutor/ExecutorConfig.java |   80 ++++++++++++++++++++++++++++++++++++++++
 1 files changed, 80 insertions(+), 0 deletions(-)

diff --git a/src/main/java/com/gk/firework/Config/ThreadExecutor/ExecutorConfig.java b/src/main/java/com/gk/firework/Config/ThreadExecutor/ExecutorConfig.java
new file mode 100644
index 0000000..debe134
--- /dev/null
+++ b/src/main/java/com/gk/firework/Config/ThreadExecutor/ExecutorConfig.java
@@ -0,0 +1,80 @@
+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());
+        }
+    }
+
+
+}

--
Gitblit v1.9.2