diff --git a/pom.xml b/pom.xml
index dbeaab9d..1969d628 100644
--- a/pom.xml
+++ b/pom.xml
@@ -55,6 +55,13 @@
hengyunabc
hengyunabc@gmail.com
+
+ mercyblitz
+ Mercy Ma
+ mercyblitz@gmail.com
+ Alibaba
+ https://github.com/mercyblitz
+
@@ -81,13 +88,14 @@
spring-cloud-alibaba-sentinel-datasource
spring-cloud-alibaba-nacos-config
spring-cloud-alibaba-nacos-discovery
+ spring-cloud-alibaba-nacos-config-server
+ spring-cloud-alicloud-context
spring-cloud-alibaba-examples
spring-cloud-alibaba-test
spring-cloud-alibaba-docs
spring-cloud-starter-alibaba
spring-cloud-starter-alicloud
spring-cloud-alicloud-oss
- spring-cloud-alicloud-context
spring-cloud-alicloud-acm
spring-cloud-alicloud-ans
diff --git a/spring-cloud-alibaba-dependencies/pom.xml b/spring-cloud-alibaba-dependencies/pom.xml
index 7a1f5c56..b663184f 100644
--- a/spring-cloud-alibaba-dependencies/pom.xml
+++ b/spring-cloud-alibaba-dependencies/pom.xml
@@ -28,6 +28,7 @@
+
com.alibaba.cloud
@@ -60,11 +61,20 @@
acm-sdk
${acm.version}
+
com.alibaba.nacos
nacos-client
${nacos.version}
+
+
+ com.alibaba.nacos
+ nacos-config
+ ${nacos.version}
+
+
+
com.alibaba.csp
sentinel-core
diff --git a/spring-cloud-alibaba-nacos-config-server/pom.xml b/spring-cloud-alibaba-nacos-config-server/pom.xml
new file mode 100644
index 00000000..9287892e
--- /dev/null
+++ b/spring-cloud-alibaba-nacos-config-server/pom.xml
@@ -0,0 +1,64 @@
+
+
+
+ org.springframework.cloud
+ spring-cloud-alibaba
+ 0.2.1.BUILD-SNAPSHOT
+ ../pom.xml
+
+ 4.0.0
+
+ org.springframework.cloud
+ spring-cloud-alibaba-nacos-config-server
+ Spring Cloud Alibaba Nacos Config Server
+
+
+
+
+
+ com.alibaba.nacos
+ nacos-config
+
+
+
+
+ org.springframework.cloud
+ spring-cloud-config-server
+
+
+
+
+ org.springframework.boot
+ spring-boot-starter
+ true
+
+
+
+ org.springframework.boot
+ spring-boot-starter-actuator
+ true
+
+
+
+ org.springframework.boot
+ spring-boot-configuration-processor
+ true
+
+
+
+ org.springframework.boot
+ spring-boot-starter-test
+ test
+
+
+
+ org.springframework.cloud
+ spring-cloud-test-support
+ test
+
+
+
+
+
diff --git a/spring-cloud-alibaba-nacos-config-server/src/main/java/org/springframework/cloud/alibaba/nacos/config/server/NacosConfigServerAutoConfiguration.java b/spring-cloud-alibaba-nacos-config-server/src/main/java/org/springframework/cloud/alibaba/nacos/config/server/NacosConfigServerAutoConfiguration.java
new file mode 100644
index 00000000..74a4903d
--- /dev/null
+++ b/spring-cloud-alibaba-nacos-config-server/src/main/java/org/springframework/cloud/alibaba/nacos/config/server/NacosConfigServerAutoConfiguration.java
@@ -0,0 +1,47 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You 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.config.server;
+
+import org.springframework.boot.autoconfigure.AutoConfigureBefore;
+import org.springframework.boot.autoconfigure.condition.ConditionalOnClass;
+import org.springframework.cloud.alibaba.nacos.config.server.environment.NacosEnvironmentRepository;
+import org.springframework.cloud.config.server.EnableConfigServer;
+import org.springframework.cloud.config.server.config.ConfigServerAutoConfiguration;
+import org.springframework.context.annotation.Bean;
+import org.springframework.context.annotation.ComponentScan;
+import org.springframework.context.annotation.Configuration;
+
+/**
+ * Nacos Config Server Auto-Configuration
+ *
+ * @author Mercy
+ * @since 0.2.0
+ */
+@ConditionalOnClass(EnableConfigServer.class) // If class of @EnableConfigServer is present in class-path
+@ComponentScan(basePackages = {
+ "com.alibaba.nacos.config.server",
+})
+@AutoConfigureBefore(ConfigServerAutoConfiguration.class)
+@Configuration
+public class NacosConfigServerAutoConfiguration {
+
+ @Bean
+ public NacosEnvironmentRepository nacosEnvironmentRepository() {
+ return new NacosEnvironmentRepository();
+ }
+
+}
diff --git a/spring-cloud-alibaba-nacos-config-server/src/main/java/org/springframework/cloud/alibaba/nacos/config/server/environment/NacosEnvironmentRepository.java b/spring-cloud-alibaba-nacos-config-server/src/main/java/org/springframework/cloud/alibaba/nacos/config/server/environment/NacosEnvironmentRepository.java
new file mode 100644
index 00000000..50b054aa
--- /dev/null
+++ b/spring-cloud-alibaba-nacos-config-server/src/main/java/org/springframework/cloud/alibaba/nacos/config/server/environment/NacosEnvironmentRepository.java
@@ -0,0 +1,85 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You 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.config.server.environment;
+
+import com.alibaba.nacos.config.server.model.ConfigInfo;
+import com.alibaba.nacos.config.server.service.PersistService;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.cloud.config.environment.Environment;
+import org.springframework.cloud.config.environment.PropertySource;
+import org.springframework.cloud.config.server.environment.EnvironmentRepository;
+import org.springframework.util.StringUtils;
+
+import java.io.IOException;
+import java.io.StringReader;
+import java.util.Properties;
+
+import static com.alibaba.nacos.config.server.constant.Constants.DEFAULT_GROUP;
+
+/**
+ * Nacos {@link EnvironmentRepository}
+ *
+ * @author Mercy
+ * @since 0.2.0
+ */
+public class NacosEnvironmentRepository implements EnvironmentRepository {
+
+ @Autowired
+ private PersistService persistService;
+
+ @Override
+ public Environment findOne(String application, String profile, String label) {
+
+ String dataId = application + "-" + profile + ".properties";
+
+ ConfigInfo configInfo = persistService.findConfigInfo(dataId, DEFAULT_GROUP, label);
+
+ return createEnvironment(configInfo, application, profile);
+ }
+
+ private Environment createEnvironment(ConfigInfo configInfo, String application, String profile) {
+
+ Environment environment = new Environment(application, profile);
+
+ Properties properties = createProperties(configInfo);
+
+ String propertySourceName = String.format("Nacos[application : %s , profile : %s]", application, profile);
+
+ PropertySource propertySource = new PropertySource(propertySourceName, properties);
+
+ environment.add(propertySource);
+
+ return environment;
+ }
+
+ private Properties createProperties(ConfigInfo configInfo) {
+ Properties properties = new Properties();
+ String content = configInfo == null ? null : configInfo.getContent();
+ if (StringUtils.hasText(content)) {
+ try {
+ properties.load(new StringReader(content));
+ } catch (IOException e) {
+ throw new IllegalStateException("The format of content is a properties");
+ }
+ }
+ return properties;
+ }
+
+ private static String[] of(String... values) {
+ return values;
+ }
+}
diff --git a/spring-cloud-alibaba-nacos-config-server/src/main/resources/META-INF/spring.factories b/spring-cloud-alibaba-nacos-config-server/src/main/resources/META-INF/spring.factories
new file mode 100644
index 00000000..861f60f0
--- /dev/null
+++ b/spring-cloud-alibaba-nacos-config-server/src/main/resources/META-INF/spring.factories
@@ -0,0 +1,3 @@
+# Auto-Configuration
+org.springframework.boot.autoconfigure.EnableAutoConfiguration=\
+org.springframework.cloud.alibaba.nacos.config.server.NacosConfigServerAutoConfiguration
\ No newline at end of file
diff --git a/spring-cloud-alibaba-nacos-config-server/src/test/java/org/springframework/cloud/alibaba/nacos/config/server/bootstrap/NacosConfigServerBootstrap.java b/spring-cloud-alibaba-nacos-config-server/src/test/java/org/springframework/cloud/alibaba/nacos/config/server/bootstrap/NacosConfigServerBootstrap.java
new file mode 100644
index 00000000..3e379457
--- /dev/null
+++ b/spring-cloud-alibaba-nacos-config-server/src/test/java/org/springframework/cloud/alibaba/nacos/config/server/bootstrap/NacosConfigServerBootstrap.java
@@ -0,0 +1,47 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You 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.config.server.bootstrap;
+
+import org.springframework.boot.ApplicationRunner;
+import org.springframework.boot.SpringApplication;
+import org.springframework.boot.autoconfigure.EnableAutoConfiguration;
+import org.springframework.cloud.config.server.EnableConfigServer;
+import org.springframework.context.annotation.Bean;
+
+/**
+ * Nacos Config Server Bootstrap
+ *
+ * @author Mercy
+ * @since 0.2.0
+ */
+@EnableAutoConfiguration
+@EnableConfigServer
+public class NacosConfigServerBootstrap {
+
+ public static void main(String[] args) {
+ System.setProperty("nacos.standalone", "true");
+ SpringApplication.run(NacosConfigServerBootstrap.class);
+ }
+
+ @Bean
+ public ApplicationRunner applicationRunner() {
+
+ return args -> {
+ System.out.println("Running...");
+ };
+ }
+}
diff --git a/spring-cloud-alibaba-nacos-config-server/src/test/resources/application.properties b/spring-cloud-alibaba-nacos-config-server/src/test/resources/application.properties
new file mode 100644
index 00000000..dcecabe7
--- /dev/null
+++ b/spring-cloud-alibaba-nacos-config-server/src/test/resources/application.properties
@@ -0,0 +1,2 @@
+spring.application.name=nacos-config-server
+management.endpoints.web.exposure.include=*
\ No newline at end of file