瀏覽代碼

fix 修复 nacos 与 undertow 整合使用 停止应用时报错的问题

疯狂的狮子li 4 年之前
父節點
當前提交
a99b8107e0

+ 6 - 0
ruoyi-common/ruoyi-common-web/pom.xml

@@ -34,5 +34,11 @@
             <artifactId>spring-boot-starter-undertow</artifactId>
         </dependency>
 
+        <dependency>
+            <groupId>com.alibaba.cloud</groupId>
+            <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
+            <optional>true</optional>
+        </dependency>
+
     </dependencies>
 </project>

+ 38 - 0
ruoyi-common/ruoyi-common-web/src/main/java/com/ruoyi/common/web/config/NacosConfig.java

@@ -0,0 +1,38 @@
+package com.ruoyi.common.web.config;
+
+import com.alibaba.cloud.nacos.ConditionalOnNacosDiscoveryEnabled;
+import com.alibaba.cloud.nacos.NacosDiscoveryProperties;
+import com.alibaba.cloud.nacos.NacosServiceManager;
+import com.alibaba.cloud.nacos.discovery.NacosDiscoveryAutoConfiguration;
+import com.alibaba.cloud.nacos.discovery.NacosDiscoveryClientConfiguration;
+import com.alibaba.cloud.nacos.discovery.NacosWatch;
+import com.ruoyi.common.web.nacos.CustomNacosWatch;
+import org.springframework.boot.autoconfigure.AutoConfigureAfter;
+import org.springframework.boot.autoconfigure.AutoConfigureBefore;
+import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty;
+import org.springframework.cloud.client.ConditionalOnBlockingDiscoveryEnabled;
+import org.springframework.cloud.client.ConditionalOnDiscoveryEnabled;
+import org.springframework.context.annotation.Bean;
+import org.springframework.context.annotation.Configuration;
+
+/**
+ * 自定义 nacos 监听 解决与 Undertow 整合报错问题
+ *
+ * @author Lion Li
+ */
+@Configuration(proxyBeanMethods = false)
+@ConditionalOnDiscoveryEnabled
+@ConditionalOnBlockingDiscoveryEnabled
+@ConditionalOnNacosDiscoveryEnabled
+@AutoConfigureBefore(NacosDiscoveryClientConfiguration.class)
+@AutoConfigureAfter(NacosDiscoveryAutoConfiguration.class)
+public class NacosConfig {
+
+    @Bean
+    @ConditionalOnProperty(value = "spring.cloud.nacos.discovery.watch.enabled", matchIfMissing = true)
+    public NacosWatch nacosWatch(NacosServiceManager nacosServiceManager,
+                                 NacosDiscoveryProperties nacosDiscoveryProperties) {
+        return new CustomNacosWatch(nacosServiceManager, nacosDiscoveryProperties);
+    }
+
+}

+ 25 - 0
ruoyi-common/ruoyi-common-web/src/main/java/com/ruoyi/common/web/nacos/CustomNacosWatch.java

@@ -0,0 +1,25 @@
+package com.ruoyi.common.web.nacos;
+
+import com.alibaba.cloud.nacos.NacosDiscoveryProperties;
+import com.alibaba.cloud.nacos.NacosServiceManager;
+import com.alibaba.cloud.nacos.discovery.NacosWatch;
+
+/**
+ * 自定义 nacos 监听
+ *
+ * @author Lion Li
+ */
+public class CustomNacosWatch extends NacosWatch {
+
+    public CustomNacosWatch(NacosServiceManager nacosServiceManager, NacosDiscoveryProperties properties) {
+        super(nacosServiceManager, properties);
+    }
+
+    /**
+     * 重写解决与 Undertow 关闭顺序冲突导致报错问题
+     */
+    @Override
+    public int getPhase() {
+        return Integer.MAX_VALUE;
+    }
+}

+ 2 - 1
ruoyi-common/ruoyi-common-web/src/main/resources/META-INF/spring.factories

@@ -1,3 +1,4 @@
 org.springframework.boot.autoconfigure.EnableAutoConfiguration=\
   com.ruoyi.common.web.config.I18nConfig,\
-  com.ruoyi.common.web.config.UndertowConfig
+  com.ruoyi.common.web.config.UndertowConfig,\
+  com.ruoyi.common.web.config.NacosConfig