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..845aebc7 --- /dev/null +++ b/spring-cloud-alibaba-examples/nacos-example/nacos-discovery-example/nacos-discovery-with-spring-cloud-config-example/pom.xml @@ -0,0 +1,63 @@ + + + + + org.springframework.cloud + nacos-discovery-example + 0.1.3.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..725b24dd --- /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..9f991956 --- /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 5b0779de..e35816ae 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,6 +19,7 @@ nacos-discovery-consumer-example nacos-discovery-provider-example + nacos-discovery-with-spring-cloud-config-example diff --git a/spring-cloud-alibaba-nacos-discovery/pom.xml b/spring-cloud-alibaba-nacos-discovery/pom.xml index 74eada8d..a6ecb237 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..fd28f5e0 --- /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 javax.annotation.PostConstruct; + +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; + +/** + * 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..13dee285 --- /dev/null +++ b/spring-cloud-alibaba-nacos-discovery/src/main/java/org/springframework/cloud/alibaba/nacos/discovery/configclient/NacosDiscoveryClientConfigServiceBootstrapConfiguration.java @@ -0,0 +1,39 @@ +/* + * 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; + +/** + * 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..b0b91897 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