diff --git a/dubbo-config/dubbo-config-api/src/main/java/org/apache/dubbo/config/RegistryConfig.java b/dubbo-config/dubbo-config-api/src/main/java/org/apache/dubbo/config/RegistryConfig.java index 83f56b1fd48..abcc062d109 100644 --- a/dubbo-config/dubbo-config-api/src/main/java/org/apache/dubbo/config/RegistryConfig.java +++ b/dubbo-config/dubbo-config-api/src/main/java/org/apache/dubbo/config/RegistryConfig.java @@ -23,11 +23,11 @@ import java.util.Map; import static org.apache.dubbo.common.constants.CommonConstants.FILE_KEY; -import static org.apache.dubbo.common.constants.CommonConstants.PROTOCOL_KEY; import static org.apache.dubbo.common.constants.CommonConstants.PASSWORD_KEY; -import static org.apache.dubbo.config.Constants.REGISTRIES_SUFFIX; +import static org.apache.dubbo.common.constants.CommonConstants.PROTOCOL_KEY; import static org.apache.dubbo.common.constants.CommonConstants.SHUTDOWN_WAIT_KEY; import static org.apache.dubbo.common.constants.CommonConstants.USERNAME_KEY; +import static org.apache.dubbo.config.Constants.REGISTRIES_SUFFIX; import static org.apache.dubbo.config.Constants.ZOOKEEPER_PROTOCOL; import static org.apache.dubbo.registry.Constants.EXTRA_KEYS_KEY; @@ -182,6 +182,11 @@ public void setAddress(String address) { int i = address.indexOf("://"); if (i > 0) { this.updateIdIfAbsent(address.substring(0, i)); + this.updateProtocolIfAbsent(address.substring(0, i)); + int port = address.lastIndexOf(":"); + if (port > 0) { + this.updatePortIfAbsent(StringUtils.parseInteger(address.substring(port + 1))); + } } } } @@ -432,4 +437,15 @@ public boolean isValid() { return !StringUtils.isEmpty(address); } + protected void updatePortIfAbsent(Integer value) { + if (value != null && value > 0 && port == null) { + this.port = value; + } + } + + protected void updateProtocolIfAbsent(String value) { + if (StringUtils.isNotEmpty(value) && StringUtils.isEmpty(protocol)) { + this.protocol = value; + } + } } diff --git a/dubbo-config/dubbo-config-api/src/test/java/org/apache/dubbo/config/RegistryConfigTest.java b/dubbo-config/dubbo-config-api/src/test/java/org/apache/dubbo/config/RegistryConfigTest.java index 51d91fc601d..fb74b1ea48b 100644 --- a/dubbo-config/dubbo-config-api/src/test/java/org/apache/dubbo/config/RegistryConfigTest.java +++ b/dubbo-config/dubbo-config-api/src/test/java/org/apache/dubbo/config/RegistryConfigTest.java @@ -17,14 +17,15 @@ package org.apache.dubbo.config; +import org.junit.jupiter.api.Assertions; import org.junit.jupiter.api.Test; import java.util.Collections; import java.util.HashMap; import java.util.Map; -import static org.apache.dubbo.config.Constants.SHUTDOWN_TIMEOUT_KEY; import static org.apache.dubbo.common.constants.CommonConstants.SHUTDOWN_WAIT_KEY; +import static org.apache.dubbo.config.Constants.SHUTDOWN_TIMEOUT_KEY; import static org.hamcrest.CoreMatchers.is; import static org.hamcrest.MatcherAssert.assertThat; import static org.hamcrest.Matchers.equalTo; @@ -177,4 +178,13 @@ public void testDefault() throws Exception { assertThat(registry.isDefault(), is(true)); } + @Test + public void testEquals() throws Exception { + RegistryConfig registry1 = new RegistryConfig(); + RegistryConfig registry2 = new RegistryConfig(); + registry1.setAddress("zookeeper://127.0.0.1:2182"); + registry2.setAddress("zookeeper://127.0.0.1:2183"); + Assertions.assertNotEquals(registry1, registry2); + } + }