From a99b8107e09472086fd7dfc146242f0df2e32432 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?=E7=96=AF=E7=8B=82=E7=9A=84=E7=8B=AE=E5=AD=90li?=
<15040126243@163.com>
Date: Wed, 15 Jun 2022 11:44:10 +0800
Subject: [PATCH] =?UTF-8?q?fix=20=E4=BF=AE=E5=A4=8D=20nacos=20=E4=B8=8E=20?=
=?UTF-8?q?undertow=20=E6=95=B4=E5=90=88=E4=BD=BF=E7=94=A8=20=E5=81=9C?=
=?UTF-8?q?=E6=AD=A2=E5=BA=94=E7=94=A8=E6=97=B6=E6=8A=A5=E9=94=99=E7=9A=84?=
=?UTF-8?q?=E9=97=AE=E9=A2=98?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
ruoyi-common/ruoyi-common-web/pom.xml | 6 +++
.../ruoyi/common/web/config/NacosConfig.java | 38 +++++++++++++++++++
.../common/web/nacos/CustomNacosWatch.java | 25 ++++++++++++
.../main/resources/META-INF/spring.factories | 3 +-
4 files changed, 71 insertions(+), 1 deletion(-)
create mode 100644 ruoyi-common/ruoyi-common-web/src/main/java/com/ruoyi/common/web/config/NacosConfig.java
create mode 100644 ruoyi-common/ruoyi-common-web/src/main/java/com/ruoyi/common/web/nacos/CustomNacosWatch.java
diff --git a/ruoyi-common/ruoyi-common-web/pom.xml b/ruoyi-common/ruoyi-common-web/pom.xml
index f1a60894..978a9a66 100644
--- a/ruoyi-common/ruoyi-common-web/pom.xml
+++ b/ruoyi-common/ruoyi-common-web/pom.xml
@@ -34,5 +34,11 @@
spring-boot-starter-undertow
+
+ com.alibaba.cloud
+ spring-cloud-starter-alibaba-nacos-discovery
+ true
+
+
diff --git a/ruoyi-common/ruoyi-common-web/src/main/java/com/ruoyi/common/web/config/NacosConfig.java b/ruoyi-common/ruoyi-common-web/src/main/java/com/ruoyi/common/web/config/NacosConfig.java
new file mode 100644
index 00000000..67280d5e
--- /dev/null
+++ b/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);
+ }
+
+}
diff --git a/ruoyi-common/ruoyi-common-web/src/main/java/com/ruoyi/common/web/nacos/CustomNacosWatch.java b/ruoyi-common/ruoyi-common-web/src/main/java/com/ruoyi/common/web/nacos/CustomNacosWatch.java
new file mode 100644
index 00000000..8aacb509
--- /dev/null
+++ b/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;
+ }
+}
diff --git a/ruoyi-common/ruoyi-common-web/src/main/resources/META-INF/spring.factories b/ruoyi-common/ruoyi-common-web/src/main/resources/META-INF/spring.factories
index a6fc05d6..ad7224f2 100644
--- a/ruoyi-common/ruoyi-common-web/src/main/resources/META-INF/spring.factories
+++ b/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