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(); + } }