From 83cdeacaa88461fdc83921864c34770252b7d0b4 Mon Sep 17 00:00:00 2001 From: 疯狂的狮子li <15040126243@163.com> Date: 星期五, 22 四月 2022 12:06:56 +0800 Subject: [PATCH] update 简化 全局线程池配置 使用cpu核心数自动处理 --- ruoyi-framework/src/main/java/com/ruoyi/framework/config/ThreadPoolConfig.java | 55 +++++++++++++++++-------------------------------------- 1 files changed, 17 insertions(+), 38 deletions(-) diff --git a/ruoyi-framework/src/main/java/com/ruoyi/framework/config/ThreadPoolConfig.java b/ruoyi-framework/src/main/java/com/ruoyi/framework/config/ThreadPoolConfig.java index 30d5ef9..ebf236c 100644 --- a/ruoyi-framework/src/main/java/com/ruoyi/framework/config/ThreadPoolConfig.java +++ b/ruoyi-framework/src/main/java/com/ruoyi/framework/config/ThreadPoolConfig.java @@ -1,14 +1,14 @@ package com.ruoyi.framework.config; import com.ruoyi.common.utils.Threads; +import com.ruoyi.framework.config.properties.ThreadPoolProperties; import org.apache.commons.lang3.concurrent.BasicThreadFactory; -import org.springframework.beans.factory.annotation.Value; +import org.springframework.beans.factory.annotation.Autowired; import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import org.springframework.scheduling.concurrent.ThreadPoolTaskExecutor; -import java.util.concurrent.RejectedExecutionHandler; import java.util.concurrent.ScheduledExecutorService; import java.util.concurrent.ScheduledThreadPoolExecutor; import java.util.concurrent.ThreadPoolExecutor; @@ -21,45 +21,23 @@ @Configuration public class ThreadPoolConfig { - // 鏍稿績绾跨▼姹犲ぇ灏� - @Value("${threadPoolConfig.corePoolSize}") - private int corePoolSize; + /** + * 鏍稿績绾跨▼鏁� = cpu 鏍稿績鏁� + 1 + */ + private final int core = Runtime.getRuntime().availableProcessors() + 1; - // 鏈�澶у彲鍒涘缓鐨勭嚎绋嬫暟 - @Value("${threadPoolConfig.maxPoolSize}") - private int maxPoolSize; - - // 闃熷垪鏈�澶ч暱搴� - @Value("${threadPoolConfig.queueCapacity}") - private int queueCapacity; - - // 绾跨▼姹犵淮鎶ょ嚎绋嬫墍鍏佽鐨勭┖闂叉椂闂� - @Value("${threadPoolConfig.keepAliveSeconds}") - private int keepAliveSeconds; - - // 绾跨▼姹犲鎷掔粷浠诲姟(鏃犵嚎绋嬪彲鐢�)鐨勫鐞嗙瓥鐣� - @Value("${threadPoolConfig.rejectedExecutionHandler}") - private String rejectedExecutionHandler; + @Autowired + private ThreadPoolProperties threadPoolProperties; @Bean(name = "threadPoolTaskExecutor") - @ConditionalOnProperty(prefix = "threadPoolTaskExecutor", name = "enabled", havingValue = "true") + @ConditionalOnProperty(prefix = "thread-pool", name = "enabled", havingValue = "true") public ThreadPoolTaskExecutor threadPoolTaskExecutor() { ThreadPoolTaskExecutor executor = new ThreadPoolTaskExecutor(); - executor.setMaxPoolSize(maxPoolSize); - executor.setCorePoolSize(corePoolSize); - executor.setQueueCapacity(queueCapacity); - executor.setKeepAliveSeconds(keepAliveSeconds); - RejectedExecutionHandler handler; - if (rejectedExecutionHandler.equals("CallerRunsPolicy")) { - handler = new ThreadPoolExecutor.CallerRunsPolicy(); - } else if (rejectedExecutionHandler.equals("DiscardOldestPolicy")) { - handler = new ThreadPoolExecutor.DiscardOldestPolicy(); - } else if (rejectedExecutionHandler.equals("DiscardPolicy")) { - handler = new ThreadPoolExecutor.DiscardPolicy(); - } else { - handler = new ThreadPoolExecutor.AbortPolicy(); - } - executor.setRejectedExecutionHandler(handler); + executor.setMaxPoolSize(core); + executor.setCorePoolSize(core * 2); + executor.setQueueCapacity(threadPoolProperties.getQueueCapacity()); + executor.setKeepAliveSeconds(threadPoolProperties.getKeepAliveSeconds()); + executor.setRejectedExecutionHandler(new ThreadPoolExecutor.CallerRunsPolicy()); return executor; } @@ -68,8 +46,9 @@ */ @Bean(name = "scheduledExecutorService") protected ScheduledExecutorService scheduledExecutorService() { - return new ScheduledThreadPoolExecutor(corePoolSize, - new BasicThreadFactory.Builder().namingPattern("schedule-pool-%d").daemon(true).build()) { + return new ScheduledThreadPoolExecutor(core, + new BasicThreadFactory.Builder().namingPattern("schedule-pool-%d").daemon(true).build(), + new ThreadPoolExecutor.CallerRunsPolicy()) { @Override protected void afterExecute(Runnable r, Throwable t) { super.afterExecute(r, t); -- Gitblit v1.9.3