From ea6ecb8be1f710bd5d6c117929813d3858d8edb7 Mon Sep 17 00:00:00 2001 From: Jevon Yang Date: Fri, 21 Jun 2019 15:50:20 +0800 Subject: [PATCH 1/2] Configuration for looking up config-server URL via nacos discovery --- spring-cloud-alibaba-nacos-discovery/pom.xml | 12 ++++ .../NacosConfigServerAutoConfiguration.java | 57 +++++++++++++++++++ ...ntConfigServiceBootstrapConfiguration.java | 41 +++++++++++++ .../main/resources/META-INF/spring.factories | 5 +- 4 files changed, 114 insertions(+), 1 deletion(-) create mode 100644 spring-cloud-alibaba-nacos-discovery/src/main/java/org/springframework/cloud/alibaba/nacos/discovery/configclient/NacosConfigServerAutoConfiguration.java create mode 100644 spring-cloud-alibaba-nacos-discovery/src/main/java/org/springframework/cloud/alibaba/nacos/discovery/configclient/NacosDiscoveryClientConfigServiceBootstrapConfiguration.java diff --git a/spring-cloud-alibaba-nacos-discovery/pom.xml b/spring-cloud-alibaba-nacos-discovery/pom.xml index d56ad8e1..4b3b5287 100644 --- a/spring-cloud-alibaba-nacos-discovery/pom.xml +++ b/spring-cloud-alibaba-nacos-discovery/pom.xml @@ -34,6 +34,18 @@ spring-cloud-starter-netflix-ribbon + + org.springframework.cloud + spring-cloud-config-client + true + + + + org.springframework.cloud + spring-cloud-config-server + true + + org.springframework.boot spring-boot-actuator diff --git a/spring-cloud-alibaba-nacos-discovery/src/main/java/org/springframework/cloud/alibaba/nacos/discovery/configclient/NacosConfigServerAutoConfiguration.java b/spring-cloud-alibaba-nacos-discovery/src/main/java/org/springframework/cloud/alibaba/nacos/discovery/configclient/NacosConfigServerAutoConfiguration.java new file mode 100644 index 00000000..f1cf3f3f --- /dev/null +++ b/spring-cloud-alibaba-nacos-discovery/src/main/java/org/springframework/cloud/alibaba/nacos/discovery/configclient/NacosConfigServerAutoConfiguration.java @@ -0,0 +1,57 @@ +/* + * Copyright (C) 2018 the original author or authors. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package org.springframework.cloud.alibaba.nacos.discovery.configclient; + +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.boot.autoconfigure.condition.ConditionalOnClass; +import org.springframework.boot.context.properties.EnableConfigurationProperties; +import org.springframework.cloud.alibaba.nacos.NacosDiscoveryProperties; +import org.springframework.cloud.config.server.config.ConfigServerProperties; +import org.springframework.context.annotation.Configuration; +import org.springframework.util.StringUtils; + +import javax.annotation.PostConstruct; + +/** + * Extra configuration for config server if it happens to be registered with Nacos. + * + * @author JevonYang + */ +@Configuration +@EnableConfigurationProperties +@ConditionalOnClass({ NacosDiscoveryProperties.class, ConfigServerProperties.class }) +public class NacosConfigServerAutoConfiguration { + + @Autowired(required = false) + private NacosDiscoveryProperties properties; + + @Autowired(required = false) + private ConfigServerProperties server; + + @PostConstruct + public void init() { + if (this.properties == null || this.server == null) { + return; + } + String prefix = this.server.getPrefix(); + if (StringUtils.hasText(prefix) && !StringUtils + .hasText(this.properties.getMetadata().get("configPath"))) { + this.properties.getMetadata().put("configPath", prefix); + } + } + +} diff --git a/spring-cloud-alibaba-nacos-discovery/src/main/java/org/springframework/cloud/alibaba/nacos/discovery/configclient/NacosDiscoveryClientConfigServiceBootstrapConfiguration.java b/spring-cloud-alibaba-nacos-discovery/src/main/java/org/springframework/cloud/alibaba/nacos/discovery/configclient/NacosDiscoveryClientConfigServiceBootstrapConfiguration.java new file mode 100644 index 00000000..aaf35632 --- /dev/null +++ b/spring-cloud-alibaba-nacos-discovery/src/main/java/org/springframework/cloud/alibaba/nacos/discovery/configclient/NacosDiscoveryClientConfigServiceBootstrapConfiguration.java @@ -0,0 +1,41 @@ +/* + * Copyright (C) 2018 the original author or authors. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package org.springframework.cloud.alibaba.nacos.discovery.configclient; + +import org.springframework.boot.autoconfigure.ImportAutoConfiguration; +import org.springframework.boot.autoconfigure.condition.ConditionalOnClass; +import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty; +import org.springframework.cloud.alibaba.nacos.NacosDiscoveryAutoConfiguration; +import org.springframework.cloud.alibaba.nacos.discovery.NacosDiscoveryClientAutoConfiguration; +import org.springframework.cloud.config.client.ConfigServicePropertySourceLocator; +import org.springframework.context.annotation.Configuration; + +import javax.annotation.PostConstruct; + +/** + * Helper for config client that wants to lookup the config server via discovery. + * + * @author JevonYang + */ +@ConditionalOnClass(ConfigServicePropertySourceLocator.class) +@ConditionalOnProperty(value = "spring.cloud.config.discovery.enabled", matchIfMissing = false) +@Configuration +@ImportAutoConfiguration({ NacosDiscoveryClientAutoConfiguration.class, + NacosDiscoveryAutoConfiguration.class }) +public class NacosDiscoveryClientConfigServiceBootstrapConfiguration { + +} diff --git a/spring-cloud-alibaba-nacos-discovery/src/main/resources/META-INF/spring.factories b/spring-cloud-alibaba-nacos-discovery/src/main/resources/META-INF/spring.factories index 2fe11df1..3b6c62c6 100644 --- a/spring-cloud-alibaba-nacos-discovery/src/main/resources/META-INF/spring.factories +++ b/spring-cloud-alibaba-nacos-discovery/src/main/resources/META-INF/spring.factories @@ -2,4 +2,7 @@ org.springframework.boot.autoconfigure.EnableAutoConfiguration=\ org.springframework.cloud.alibaba.nacos.NacosDiscoveryAutoConfiguration,\ org.springframework.cloud.alibaba.nacos.ribbon.RibbonNacosAutoConfiguration,\ org.springframework.cloud.alibaba.nacos.endpoint.NacosDiscoveryEndpointAutoConfiguration,\ - org.springframework.cloud.alibaba.nacos.discovery.NacosDiscoveryClientAutoConfiguration + org.springframework.cloud.alibaba.nacos.discovery.NacosDiscoveryClientAutoConfiguration,\ + org.springframework.cloud.alibaba.nacos.discovery.configclient.NacosConfigServerAutoConfiguration +org.springframework.cloud.bootstrap.BootstrapConfiguration=\ + org.springframework.cloud.alibaba.nacos.discovery.configclient.NacosDiscoveryClientConfigServiceBootstrapConfiguration From f4f407b84cf939bc21d10c9c19b7f7ff2ec1b550 Mon Sep 17 00:00:00 2001 From: Jevon Yang Date: Fri, 21 Jun 2019 16:12:00 +0800 Subject: [PATCH 2/2] example for issue #714 to validate the pr --- .../pom.xml | 62 +++++++++++++++++++ .../cloud/examples/GetConfigController.java | 19 ++++++ ...NacosDiscoverySpringConfigApplication.java | 18 ++++++ .../src/main/resources/application.yml | 1 + .../src/main/resources/bootstrap.yml | 10 +++ .../nacos-discovery-example/pom.xml | 1 + 6 files changed, 111 insertions(+) create mode 100644 spring-cloud-alibaba-examples/nacos-example/nacos-discovery-example/nacos-discovery-with-spring-cloud-config-example/pom.xml create mode 100644 spring-cloud-alibaba-examples/nacos-example/nacos-discovery-example/nacos-discovery-with-spring-cloud-config-example/src/main/java/org/springframework/cloud/alibaba/cloud/examples/GetConfigController.java create mode 100644 spring-cloud-alibaba-examples/nacos-example/nacos-discovery-example/nacos-discovery-with-spring-cloud-config-example/src/main/java/org/springframework/cloud/alibaba/cloud/examples/NacosDiscoverySpringConfigApplication.java create mode 100644 spring-cloud-alibaba-examples/nacos-example/nacos-discovery-example/nacos-discovery-with-spring-cloud-config-example/src/main/resources/application.yml create mode 100644 spring-cloud-alibaba-examples/nacos-example/nacos-discovery-example/nacos-discovery-with-spring-cloud-config-example/src/main/resources/bootstrap.yml diff --git a/spring-cloud-alibaba-examples/nacos-example/nacos-discovery-example/nacos-discovery-with-spring-cloud-config-example/pom.xml b/spring-cloud-alibaba-examples/nacos-example/nacos-discovery-example/nacos-discovery-with-spring-cloud-config-example/pom.xml new file mode 100644 index 00000000..d51c58fb --- /dev/null +++ b/spring-cloud-alibaba-examples/nacos-example/nacos-discovery-example/nacos-discovery-with-spring-cloud-config-example/pom.xml @@ -0,0 +1,62 @@ + + + + + org.springframework.cloud + nacos-discovery-example + 0.9.1.BUILD-SNAPSHOT + + 4.0.0 + + + nacos-discovery-with-spring-cloud-config-example + jar + Example demonstrating how to use nacos discovery + + + + + org.springframework.boot + spring-boot-starter-web + + + org.springframework.cloud + spring-cloud-starter-alibaba-nacos-discovery + + + + org.springframework.cloud + spring-cloud-starter-config + + + + org.springframework.boot + spring-boot-starter-actuator + + + + org.springframework.cloud + spring-cloud-starter-netflix-ribbon + + + + + + + + org.springframework.boot + spring-boot-maven-plugin + + + org.apache.maven.plugins + maven-deploy-plugin + ${maven-deploy-plugin.version} + + true + + + + + + diff --git a/spring-cloud-alibaba-examples/nacos-example/nacos-discovery-example/nacos-discovery-with-spring-cloud-config-example/src/main/java/org/springframework/cloud/alibaba/cloud/examples/GetConfigController.java b/spring-cloud-alibaba-examples/nacos-example/nacos-discovery-example/nacos-discovery-with-spring-cloud-config-example/src/main/java/org/springframework/cloud/alibaba/cloud/examples/GetConfigController.java new file mode 100644 index 00000000..881d40ba --- /dev/null +++ b/spring-cloud-alibaba-examples/nacos-example/nacos-discovery-example/nacos-discovery-with-spring-cloud-config-example/src/main/java/org/springframework/cloud/alibaba/cloud/examples/GetConfigController.java @@ -0,0 +1,19 @@ +package org.springframework.cloud.alibaba.cloud.examples; + +import org.springframework.beans.factory.annotation.Value; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RequestMethod; +import org.springframework.web.bind.annotation.RestController; + +@RestController +public class GetConfigController { + + @Value("${config}") + private String config; + + @RequestMapping(value = "/config", method = RequestMethod.GET) + public String getConfig() { + return config; + } + +} diff --git a/spring-cloud-alibaba-examples/nacos-example/nacos-discovery-example/nacos-discovery-with-spring-cloud-config-example/src/main/java/org/springframework/cloud/alibaba/cloud/examples/NacosDiscoverySpringConfigApplication.java b/spring-cloud-alibaba-examples/nacos-example/nacos-discovery-example/nacos-discovery-with-spring-cloud-config-example/src/main/java/org/springframework/cloud/alibaba/cloud/examples/NacosDiscoverySpringConfigApplication.java new file mode 100644 index 00000000..f81a4158 --- /dev/null +++ b/spring-cloud-alibaba-examples/nacos-example/nacos-discovery-example/nacos-discovery-with-spring-cloud-config-example/src/main/java/org/springframework/cloud/alibaba/cloud/examples/NacosDiscoverySpringConfigApplication.java @@ -0,0 +1,18 @@ +package org.springframework.cloud.alibaba.cloud.examples; + +import org.springframework.boot.SpringApplication; +import org.springframework.boot.autoconfigure.SpringBootApplication; +import org.springframework.cloud.client.discovery.EnableDiscoveryClient; + +/** + * @author JevonYang + */ +@SpringBootApplication +@EnableDiscoveryClient +public class NacosDiscoverySpringConfigApplication { + + public static void main(String[] args) { + SpringApplication.run(NacosDiscoverySpringConfigApplication.class, args); + } + +} diff --git a/spring-cloud-alibaba-examples/nacos-example/nacos-discovery-example/nacos-discovery-with-spring-cloud-config-example/src/main/resources/application.yml b/spring-cloud-alibaba-examples/nacos-example/nacos-discovery-example/nacos-discovery-with-spring-cloud-config-example/src/main/resources/application.yml new file mode 100644 index 00000000..23cd46cd --- /dev/null +++ b/spring-cloud-alibaba-examples/nacos-example/nacos-discovery-example/nacos-discovery-with-spring-cloud-config-example/src/main/resources/application.yml @@ -0,0 +1 @@ +config: config-from-yml \ No newline at end of file diff --git a/spring-cloud-alibaba-examples/nacos-example/nacos-discovery-example/nacos-discovery-with-spring-cloud-config-example/src/main/resources/bootstrap.yml b/spring-cloud-alibaba-examples/nacos-example/nacos-discovery-example/nacos-discovery-with-spring-cloud-config-example/src/main/resources/bootstrap.yml new file mode 100644 index 00000000..66fab66f --- /dev/null +++ b/spring-cloud-alibaba-examples/nacos-example/nacos-discovery-example/nacos-discovery-with-spring-cloud-config-example/src/main/resources/bootstrap.yml @@ -0,0 +1,10 @@ +spring: + application: + name: client + cloud: + nacos: + discovery: + server-addr: localhost:8848 + config: + discovery: + enabled: true \ No newline at end of file diff --git a/spring-cloud-alibaba-examples/nacos-example/nacos-discovery-example/pom.xml b/spring-cloud-alibaba-examples/nacos-example/nacos-discovery-example/pom.xml index 186a069f..6f27e67a 100644 --- a/spring-cloud-alibaba-examples/nacos-example/nacos-discovery-example/pom.xml +++ b/spring-cloud-alibaba-examples/nacos-example/nacos-discovery-example/pom.xml @@ -19,5 +19,6 @@ nacos-discovery-consumer-example nacos-discovery-provider-example + nacos-discovery-with-spring-cloud-config-example