Преглед изворни кода

update 优化全局线程池配置 使用泛型 防止错误输入

疯狂的狮子li пре 3 година
родитељ
комит
f3d6d1e43b

+ 5 - 5
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:

+ 26 - 0
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<? extends RejectedExecutionHandler> clazz;
+
+}

+ 2 - 16
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;
     }

+ 2 - 1
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;
 
 }