diff --git a/ruoyi-admin/src/main/resources/application.yml b/ruoyi-admin/src/main/resources/application.yml index 6363e472e..d94ca65d1 100644 --- a/ruoyi-admin/src/main/resources/application.yml +++ b/ruoyi-admin/src/main/resources/application.yml @@ -246,11 +246,11 @@ thread-pool: # 线程池维护线程所允许的空闲时间 keepAliveSeconds: 300 # 线程池对拒绝任务(无线程可用)的处理策略 - # CallerRunsPolicy 等待 - # DiscardOldestPolicy 放弃最旧的 - # DiscardPolicy 丢弃 - # AbortPolicy 中止 - rejectedExecutionHandler: CallerRunsPolicy + # CALLER_RUNS_POLICY 等待 + # DISCARD_OLDEST_POLICY 放弃最旧的 + # DISCARD_POLICY 丢弃 + # ABORT_POLICY 中止 + rejectedExecutionHandler: CALLER_RUNS_POLICY # feign 相关配置 feign: diff --git a/ruoyi-common/src/main/java/com/ruoyi/common/enums/ThreadPoolRejectedPolicy.java b/ruoyi-common/src/main/java/com/ruoyi/common/enums/ThreadPoolRejectedPolicy.java new file mode 100644 index 000000000..0c40f341c --- /dev/null +++ b/ruoyi-common/src/main/java/com/ruoyi/common/enums/ThreadPoolRejectedPolicy.java @@ -0,0 +1,26 @@ +package com.ruoyi.common.enums; + +import lombok.AllArgsConstructor; +import lombok.Getter; + +import java.util.concurrent.RejectedExecutionHandler; +import java.util.concurrent.ThreadPoolExecutor; + +/** + * 线程池 拒绝策略 泛型 + * + * @author Lion Li + */ +@Getter +@AllArgsConstructor +public enum ThreadPoolRejectedPolicy { + + CALLER_RUNS_POLICY("等待", ThreadPoolExecutor.CallerRunsPolicy.class), + DISCARD_OLDEST_POLICY("放弃最旧的", ThreadPoolExecutor.DiscardOldestPolicy.class), + DISCARD_POLICY("丢弃", ThreadPoolExecutor.DiscardPolicy.class), + ABORT_POLICY("中止", ThreadPoolExecutor.AbortPolicy.class); + + private final String name; + private final Class clazz; + +} 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 7758e974a..5dd2b5f64 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,6 +1,7 @@ package com.ruoyi.framework.config; import com.ruoyi.common.utils.Threads; +import com.ruoyi.common.utils.reflect.ReflectUtils; import com.ruoyi.framework.config.properties.ThreadPoolProperties; import org.apache.commons.lang3.concurrent.BasicThreadFactory; import org.springframework.beans.factory.annotation.Autowired; @@ -12,7 +13,6 @@ 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; /** * 线程池配置 @@ -33,21 +33,7 @@ public class ThreadPoolConfig { executor.setCorePoolSize(threadPoolProperties.getCorePoolSize()); executor.setQueueCapacity(threadPoolProperties.getQueueCapacity()); executor.setKeepAliveSeconds(threadPoolProperties.getKeepAliveSeconds()); - RejectedExecutionHandler handler; - switch (threadPoolProperties.getRejectedExecutionHandler()) { - case "CallerRunsPolicy": - handler = new ThreadPoolExecutor.CallerRunsPolicy(); - break; - case "DiscardOldestPolicy": - handler = new ThreadPoolExecutor.DiscardOldestPolicy(); - break; - case "DiscardPolicy": - handler = new ThreadPoolExecutor.DiscardPolicy(); - break; - default: - handler = new ThreadPoolExecutor.AbortPolicy(); - break; - } + RejectedExecutionHandler handler = ReflectUtils.newInstance(threadPoolProperties.getRejectedExecutionHandler().getClazz()); executor.setRejectedExecutionHandler(handler); return executor; } diff --git a/ruoyi-framework/src/main/java/com/ruoyi/framework/config/properties/ThreadPoolProperties.java b/ruoyi-framework/src/main/java/com/ruoyi/framework/config/properties/ThreadPoolProperties.java index 08b6842aa..fbffc0f45 100644 --- a/ruoyi-framework/src/main/java/com/ruoyi/framework/config/properties/ThreadPoolProperties.java +++ b/ruoyi-framework/src/main/java/com/ruoyi/framework/config/properties/ThreadPoolProperties.java @@ -1,5 +1,6 @@ package com.ruoyi.framework.config.properties; +import com.ruoyi.common.enums.ThreadPoolRejectedPolicy; import lombok.Data; import org.springframework.boot.context.properties.ConfigurationProperties; import org.springframework.stereotype.Component; @@ -42,6 +43,6 @@ public class ThreadPoolProperties { /** * 线程池对拒绝任务(无线程可用)的处理策略 */ - private String rejectedExecutionHandler; + private ThreadPoolRejectedPolicy rejectedExecutionHandler; }