From 59e91a4e9ddaf23cebb12993c774aa899ab22d16 Mon Sep 17 00:00:00 2001
From: 郑永安 <zyazyz250@sina.com>
Date: Mon, 19 Jun 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