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