From c932e03e365522580551408fd63c26826001d14f Mon Sep 17 00:00:00 2001 From: flystar32 Date: Wed, 27 Mar 2019 17:00:30 +0800 Subject: [PATCH] Fixes #496 and #497 --- .../alibaba/nacos/NacosConfigProperties.java | 27 +++++++++++--- .../nacos/NacosConfigurationTests.java | 8 ++++ .../nacos/NacosDiscoveryProperties.java | 37 ++++++++++++++----- ...NacosDiscoveryClientAutoConfiguration.java | 3 ++ ...itional-spring-configuration-metadata.json | 6 +++ .../NacosAutoServiceRegistrationTests.java | 8 ++++ 6 files changed, 75 insertions(+), 14 deletions(-) diff --git a/spring-cloud-alibaba-nacos-config/src/main/java/org/springframework/cloud/alibaba/nacos/NacosConfigProperties.java b/spring-cloud-alibaba-nacos-config/src/main/java/org/springframework/cloud/alibaba/nacos/NacosConfigProperties.java index 1518dcff1..eb57ad4e9 100644 --- a/spring-cloud-alibaba-nacos-config/src/main/java/org/springframework/cloud/alibaba/nacos/NacosConfigProperties.java +++ b/spring-cloud-alibaba-nacos-config/src/main/java/org/springframework/cloud/alibaba/nacos/NacosConfigProperties.java @@ -36,6 +36,7 @@ import static com.alibaba.nacos.api.PropertyKeyConst.CLUSTER_NAME; import static com.alibaba.nacos.api.PropertyKeyConst.CONTEXT_PATH; import static com.alibaba.nacos.api.PropertyKeyConst.ENCODE; import static com.alibaba.nacos.api.PropertyKeyConst.ENDPOINT; +import static com.alibaba.nacos.api.PropertyKeyConst.ENDPOINT_PORT; import static com.alibaba.nacos.api.PropertyKeyConst.NAMESPACE; import static com.alibaba.nacos.api.PropertyKeyConst.SECRET_KEY; import static com.alibaba.nacos.api.PropertyKeyConst.SERVER_ADDR; @@ -90,6 +91,12 @@ public class NacosConfigProperties { */ private String endpoint; + /** + * endpoint port for Nacos, the domain port of a service, through which the server + * address can be dynamically obtained. + */ + private String endpointPort; + /** * namespace, separation configuration of different environments. */ @@ -265,6 +272,14 @@ public class NacosConfigProperties { this.name = name; } + public String getEndpointPort() { + return endpointPort; + } + + public void setEndpointPort(String endpointPort) { + this.endpointPort = endpointPort; + } + public static class Config { /** * the data id of extended configuration @@ -310,11 +325,12 @@ public class NacosConfigProperties { + ", encode='" + encode + '\'' + ", group='" + group + '\'' + ", prefix='" + prefix + '\'' + ", fileExtension='" + fileExtension + '\'' + ", timeout=" + timeout + ", endpoint='" + endpoint + '\'' - + ", namespace='" + namespace + '\'' + ", accessKey='" + accessKey + '\'' - + ", secretKey='" + secretKey + '\'' + ", contextPath='" + contextPath - + '\'' + ", clusterName='" + clusterName + '\'' + ", name='" + name + '\'' - + ", sharedDataids='" + sharedDataids + '\'' + ", refreshableDataids='" - + refreshableDataids + '\'' + ", extConfig=" + extConfig + '}'; + + ", endpointPort='" + endpointPort + '\'' + ", namespace='" + namespace + + '\'' + ", accessKey='" + accessKey + '\'' + ", secretKey='" + secretKey + + '\'' + ", contextPath='" + contextPath + '\'' + ", clusterName='" + + clusterName + '\'' + ", name='" + name + '\'' + ", sharedDataids='" + + sharedDataids + '\'' + ", refreshableDataids='" + refreshableDataids + + '\'' + ", extConfig=" + extConfig + '}'; } public ConfigService configServiceInstance() { @@ -332,6 +348,7 @@ public class NacosConfigProperties { properties.put(CONTEXT_PATH, Objects.toString(this.contextPath, "")); properties.put(CLUSTER_NAME, Objects.toString(this.clusterName, "")); properties.put(ENDPOINT, Objects.toString(this.endpoint, "")); + properties.put(ENDPOINT_PORT, Objects.toString(this.endpointPort, "")); try { configService = NacosFactory.createConfigService(properties); return configService; diff --git a/spring-cloud-alibaba-nacos-config/src/test/java/org/springframework/cloud/alibaba/nacos/NacosConfigurationTests.java b/spring-cloud-alibaba-nacos-config/src/test/java/org/springframework/cloud/alibaba/nacos/NacosConfigurationTests.java index fc2a3b124..1cc122aa7 100644 --- a/spring-cloud-alibaba-nacos-config/src/test/java/org/springframework/cloud/alibaba/nacos/NacosConfigurationTests.java +++ b/spring-cloud-alibaba-nacos-config/src/test/java/org/springframework/cloud/alibaba/nacos/NacosConfigurationTests.java @@ -60,6 +60,7 @@ import org.springframework.test.context.junit4.SpringRunner; "spring.application.name=myTestService1", "spring.profiles.active=dev,test", "spring.cloud.nacos.config.server-addr=127.0.0.1:8848", "spring.cloud.nacos.config.endpoint=test-endpoint", + "spring.cloud.nacos.config.endpoint-port=8081", "spring.cloud.nacos.config.namespace=test-namespace", "spring.cloud.nacos.config.encode=utf-8", "spring.cloud.nacos.config.timeout=1000", @@ -153,6 +154,7 @@ public class NacosConfigurationTests { checkoutNacosConfigServerAddr(); checkoutNacosConfigEndpoint(); + checkoutNacosConfigEndpointPort(); checkoutNacosConfigNamespace(); checkoutNacosConfigClusterName(); checkoutNacosConfigAccessKey(); @@ -181,6 +183,12 @@ public class NacosConfigurationTests { } + private void checkoutNacosConfigEndpointPort() { + assertEquals("NacosConfigProperties endpoint port is wrong", "8081", + properties.getEndpointPort()); + + } + private void checkoutNacosConfigNamespace() { assertEquals("NacosConfigProperties namespace is wrong", "test-namespace", properties.getNamespace()); diff --git a/spring-cloud-alibaba-nacos-discovery/src/main/java/org/springframework/cloud/alibaba/nacos/NacosDiscoveryProperties.java b/spring-cloud-alibaba-nacos-discovery/src/main/java/org/springframework/cloud/alibaba/nacos/NacosDiscoveryProperties.java index 48746f530..cce0a7fcb 100644 --- a/spring-cloud-alibaba-nacos-discovery/src/main/java/org/springframework/cloud/alibaba/nacos/NacosDiscoveryProperties.java +++ b/spring-cloud-alibaba-nacos-discovery/src/main/java/org/springframework/cloud/alibaba/nacos/NacosDiscoveryProperties.java @@ -59,6 +59,12 @@ public class NacosDiscoveryProperties { */ private String endpoint; + /** + * the domain port of a service, through which the server address can be dynamically + * obtained. + */ + private String endpointPort; + /** * namespace, separation registry of different environments. */ @@ -335,18 +341,26 @@ public class NacosDiscoveryProperties { this.watchDelay = watchDelay; } + public String getEndpointPort() { + return endpointPort; + } + + public void setEndpointPort(String endpointPort) { + this.endpointPort = endpointPort; + } + @Override public String toString() { return "NacosDiscoveryProperties{" + "serverAddr='" + serverAddr + '\'' - + ", endpoint='" + endpoint + '\'' + ", namespace='" + namespace + '\'' - + ", watchDelay=" + watchDelay + ", logName='" + logName + '\'' - + ", service='" + service + '\'' + ", weight=" + weight - + ", clusterName='" + clusterName + '\'' + ", namingLoadCacheAtStart='" - + namingLoadCacheAtStart + '\'' + ", metadata=" + metadata - + ", registerEnabled=" + registerEnabled + ", ip='" + ip + '\'' - + ", networkInterface='" + networkInterface + '\'' + ", port=" + port - + ", secure=" + secure + ", accessKey='" + accessKey + '\'' - + ", secretKey='" + secretKey + '\'' + '}'; + + ", endpoint='" + endpoint + '\'' + ", endpointPort='" + endpointPort + + '\'' + ", namespace='" + namespace + '\'' + ", watchDelay=" + watchDelay + + ", logName='" + logName + '\'' + ", service='" + service + '\'' + + ", weight=" + weight + ", clusterName='" + clusterName + '\'' + + ", namingLoadCacheAtStart='" + namingLoadCacheAtStart + '\'' + + ", metadata=" + metadata + ", registerEnabled=" + registerEnabled + + ", ip='" + ip + '\'' + ", networkInterface='" + networkInterface + '\'' + + ", port=" + port + ", secure=" + secure + ", accessKey='" + accessKey + + '\'' + ", secretKey='" + secretKey + '\'' + '}'; } public void overrideFromEnv(Environment env) { @@ -379,6 +393,10 @@ public class NacosDiscoveryProperties { this.setEndpoint( env.resolvePlaceholders("${spring.cloud.nacos.discovery.endpoint:}")); } + if (StringUtils.isEmpty(this.getEndpointPort())) { + this.setEndpointPort(env.resolvePlaceholders( + "${spring.cloud.nacos.discovery.endpoint-port:}")); + } } public NamingService namingServiceInstance() { @@ -392,6 +410,7 @@ public class NacosDiscoveryProperties { properties.put(NAMESPACE, namespace); properties.put(UtilAndComs.NACOS_NAMING_LOG_NAME, logName); properties.put(ENDPOINT, endpoint); + properties.put(ENDPOINT_PORT, endpointPort); properties.put(ACCESS_KEY, accessKey); properties.put(SECRET_KEY, secretKey); properties.put(CLUSTER_NAME, clusterName); diff --git a/spring-cloud-alibaba-nacos-discovery/src/main/java/org/springframework/cloud/alibaba/nacos/discovery/NacosDiscoveryClientAutoConfiguration.java b/spring-cloud-alibaba-nacos-discovery/src/main/java/org/springframework/cloud/alibaba/nacos/discovery/NacosDiscoveryClientAutoConfiguration.java index 5fe818b36..96e559e4a 100644 --- a/spring-cloud-alibaba-nacos-discovery/src/main/java/org/springframework/cloud/alibaba/nacos/discovery/NacosDiscoveryClientAutoConfiguration.java +++ b/spring-cloud-alibaba-nacos-discovery/src/main/java/org/springframework/cloud/alibaba/nacos/discovery/NacosDiscoveryClientAutoConfiguration.java @@ -18,6 +18,8 @@ package org.springframework.cloud.alibaba.nacos.discovery; import org.springframework.boot.autoconfigure.AutoConfigureBefore; import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean; +import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty; +import org.springframework.boot.context.properties.ConfigurationProperties; import org.springframework.boot.context.properties.EnableConfigurationProperties; import org.springframework.cloud.alibaba.nacos.ConditionalOnNacosDiscoveryEnabled; import org.springframework.cloud.alibaba.nacos.NacosDiscoveryProperties; @@ -45,6 +47,7 @@ public class NacosDiscoveryClientAutoConfiguration { @Bean @ConditionalOnMissingBean + @ConditionalOnProperty(value = "spring.cloud.nacos.discovery.watch.enabled", matchIfMissing = true) public NacosWatch nacosWatch(NacosDiscoveryProperties nacosDiscoveryProperties) { return new NacosWatch(nacosDiscoveryProperties); } diff --git a/spring-cloud-alibaba-nacos-discovery/src/main/resources/META-INF/additional-spring-configuration-metadata.json b/spring-cloud-alibaba-nacos-discovery/src/main/resources/META-INF/additional-spring-configuration-metadata.json index 75e8abd44..54c3f79f1 100644 --- a/spring-cloud-alibaba-nacos-discovery/src/main/resources/META-INF/additional-spring-configuration-metadata.json +++ b/spring-cloud-alibaba-nacos-discovery/src/main/resources/META-INF/additional-spring-configuration-metadata.json @@ -16,5 +16,11 @@ "type": "java.lang.Boolean", "defaultValue": "false", "description": "naming load from local cache at application start ." + }, + { + "name": "spring.cloud.nacos.discovery.watch.enabled", + "type": "java.lang.Boolean", + "defaultValue": "true", + "description": "enable nacos discovery watch or not ." } ]} diff --git a/spring-cloud-alibaba-nacos-discovery/src/test/java/org/springframework/cloud/alibaba/nacos/registry/NacosAutoServiceRegistrationTests.java b/spring-cloud-alibaba-nacos-discovery/src/test/java/org/springframework/cloud/alibaba/nacos/registry/NacosAutoServiceRegistrationTests.java index acd2cbb39..0ed501315 100644 --- a/spring-cloud-alibaba-nacos-discovery/src/test/java/org/springframework/cloud/alibaba/nacos/registry/NacosAutoServiceRegistrationTests.java +++ b/spring-cloud-alibaba-nacos-discovery/src/test/java/org/springframework/cloud/alibaba/nacos/registry/NacosAutoServiceRegistrationTests.java @@ -48,6 +48,7 @@ import static org.springframework.boot.test.context.SpringBootTest.WebEnvironmen "spring.application.name=myTestService1", "spring.cloud.nacos.discovery.server-addr=127.0.0.1:8848", "spring.cloud.nacos.discovery.endpoint=test-endpoint", + "spring.cloud.nacos.discovery.endpoint-port=8081", "spring.cloud.nacos.discovery.namespace=test-namespace", "spring.cloud.nacos.discovery.log-name=test-logName", "spring.cloud.nacos.discovery.weight=2", @@ -83,6 +84,7 @@ public class NacosAutoServiceRegistrationTests { checkoutNacosDiscoveryServerAddr(); checkoutNacosDiscoveryEndpoint(); + checkoutNacosDiscoveryEndpointPort(); checkoutNacosDiscoveryNamespace(); checkoutNacosDiscoveryLogName(); checkoutNacosDiscoveryWeight(); @@ -119,6 +121,12 @@ public class NacosAutoServiceRegistrationTests { } + private void checkoutNacosDiscoveryEndpointPort() { + assertEquals("NacosDiscoveryProperties endpoint port was wrong", "8081", + properties.getEndpointPort()); + + } + private void checkoutNacosDiscoveryNamespace() { assertEquals("NacosDiscoveryProperties namespace was wrong", "test-namespace", properties.getNamespace());