From ea6ecb8be1f710bd5d6c117929813d3858d8edb7 Mon Sep 17 00:00:00 2001 From: Jevon Yang Date: Fri, 21 Jun 2019 15:50:20 +0800 Subject: [PATCH] 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