From 838ac9d45348ca85f4b34a6cd0c77c26aae35f62 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: Thu, 1 Feb 2024 20:43:24 +0800 Subject: [PATCH] =?UTF-8?q?update=20=E4=BC=98=E5=8C=96=20=E4=BD=BF?= =?UTF-8?q?=E7=94=A8spring=E5=B7=A5=E5=85=B7=E8=87=AA=E5=AE=9A=E4=B9=89dub?= =?UTF-8?q?bo=20ip=E8=8E=B7=E5=8F=96=E6=96=B9=E6=B3=95(=E9=92=88=E5=AF=B9?= =?UTF-8?q?=E5=A4=9A=E7=BD=91=E5=8D=A1ip=E8=8E=B7=E5=8F=96=E4=B8=8D?= =?UTF-8?q?=E6=AD=A3=E7=A1=AE=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-dubbo/pom.xml | 5 +++ .../CustomBeanFactoryPostProcessor.java | 42 +++++++++++++++++++ .../dubbo/config/DubboConfiguration.java | 6 +++ 3 files changed, 53 insertions(+) create mode 100644 ruoyi-common/ruoyi-common-dubbo/src/main/java/org/dromara/common/dubbo/config/CustomBeanFactoryPostProcessor.java diff --git a/ruoyi-common/ruoyi-common-dubbo/pom.xml b/ruoyi-common/ruoyi-common-dubbo/pom.xml index 82317bed..4ff44a9d 100644 --- a/ruoyi-common/ruoyi-common-dubbo/pom.xml +++ b/ruoyi-common/ruoyi-common-dubbo/pom.xml @@ -54,5 +54,10 @@ + + org.springframework.cloud + spring-cloud-commons + + diff --git a/ruoyi-common/ruoyi-common-dubbo/src/main/java/org/dromara/common/dubbo/config/CustomBeanFactoryPostProcessor.java b/ruoyi-common/ruoyi-common-dubbo/src/main/java/org/dromara/common/dubbo/config/CustomBeanFactoryPostProcessor.java new file mode 100644 index 00000000..0384cd7e --- /dev/null +++ b/ruoyi-common/ruoyi-common-dubbo/src/main/java/org/dromara/common/dubbo/config/CustomBeanFactoryPostProcessor.java @@ -0,0 +1,42 @@ +package org.dromara.common.dubbo.config; + +import org.springframework.beans.BeansException; +import org.springframework.beans.factory.config.BeanFactoryPostProcessor; +import org.springframework.beans.factory.config.ConfigurableListableBeanFactory; +import org.springframework.cloud.commons.util.InetUtils; +import org.springframework.core.Ordered; + +import java.net.Inet6Address; +import java.net.InetAddress; + +/** + * dubbo自定义IP注入(避免IP不正确问题) + * + * @author Lion Li + */ +public class CustomBeanFactoryPostProcessor implements BeanFactoryPostProcessor, Ordered { + + @Override + public int getOrder() { + return Ordered.HIGHEST_PRECEDENCE; + } + + @Override + public void postProcessBeanFactory(ConfigurableListableBeanFactory beanFactory) throws BeansException { + InetUtils inetUtils = beanFactory.getBean(InetUtils.class); + String ip = "127.0.0.1"; + InetAddress address = inetUtils.findFirstNonLoopbackAddress(); + if (address != null) { + if (address instanceof Inet6Address) { + String ipv6AddressString = address.getHostAddress(); + if (ipv6AddressString.contains("%")) { + ipv6AddressString = ipv6AddressString.substring(0, ipv6AddressString.indexOf("%")); + } + ip = ipv6AddressString; + } else { + ip = inetUtils.findFirstNonLoopbackHostInfo().getIpAddress(); + } + } + System.setProperty("DUBBO_IP_TO_REGISTRY", ip); + } +} diff --git a/ruoyi-common/ruoyi-common-dubbo/src/main/java/org/dromara/common/dubbo/config/DubboConfiguration.java b/ruoyi-common/ruoyi-common-dubbo/src/main/java/org/dromara/common/dubbo/config/DubboConfiguration.java index 6fc622ef..9d50dd82 100644 --- a/ruoyi-common/ruoyi-common-dubbo/src/main/java/org/dromara/common/dubbo/config/DubboConfiguration.java +++ b/ruoyi-common/ruoyi-common-dubbo/src/main/java/org/dromara/common/dubbo/config/DubboConfiguration.java @@ -2,8 +2,10 @@ package org.dromara.common.dubbo.config; import org.dromara.common.core.factory.YmlPropertySourceFactory; import org.dromara.common.dubbo.properties.DubboCustomProperties; +import org.springframework.beans.factory.config.BeanFactoryPostProcessor; import org.springframework.boot.autoconfigure.AutoConfiguration; import org.springframework.boot.context.properties.EnableConfigurationProperties; +import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.PropertySource; /** @@ -14,4 +16,8 @@ import org.springframework.context.annotation.PropertySource; @PropertySource(value = "classpath:common-dubbo.yml", factory = YmlPropertySourceFactory.class) public class DubboConfiguration { + @Bean + public BeanFactoryPostProcessor customBeanFactoryPostProcessor() { + return new CustomBeanFactoryPostProcessor(); + } }