diff --git a/spring-cloud-alibaba-docs/src/main/asciidoc-zh/nacos-config.adoc b/spring-cloud-alibaba-docs/src/main/asciidoc-zh/nacos-config.adoc index e933cff8c..be46404b7 100644 --- a/spring-cloud-alibaba-docs/src/main/asciidoc-zh/nacos-config.adoc +++ b/spring-cloud-alibaba-docs/src/main/asciidoc-zh/nacos-config.adoc @@ -1 +1,235 @@ -== Spring Cloud Alibaba Nacos Config += Spring Cloud Alibaba Nacos Config + +== 快速开始 + +=== 基于properties的文件扩展名的配置方式 + +==== Nacos 服务端初始化 + +1、启动Nacos Server。启动方式可见 https://nacos.io/zh-cn/docs/quick-start.html[Naocs 官网] + +2、启动好Nacos之后,在Nacos添加如下的配置。注意data id是以 properties为扩展名,默认的文件扩展名方式。如下所示: + +[source,subs="normal"] +---- +Data ID: nacos-config.properties + +Group : DEFAULT_GROUP + +配置格式: TEXT + +配置内容: user.name: nacos-config-properties + user.age: 90 +---- + +==== 客户端使用方式 + +为了能够在应用程序中使用Nacos作为Sping Cloud Config的后端存储服务,在您构建Spring Boot 应用的同时添加一个Spring Boot Starter org.springframework.cloud:spring-cloud-starter-alibaba-nacos-config。以下是一个基础的maven 依赖配置: + +[source,xml] +---- + + org.springframework.boot + spring-boot-starter-parent + 2.0.5.RELEASE + + + + + + + org.springframework.cloud + spring-cloud-dependencies + Finchley.SR1 + pom + import + + + org.springframework.cloud + spring-cloud-alibaba-dependencies + 0.2.0.RELEASE + pom + import + + + + + + + org.springframework.cloud + spring-cloud-starter-alibaba-nacos-config + + + org.springframework.boot + spring-boot-starter + + + + + + + org.springframework.boot + spring-boot-maven-plugin + + + +---- + +现在就可以创建一个标准的Spring Boot的应用。 + +[source,java] +---- +@SpringBootApplication +public class ProviderApplication { + + public static void main(String[] args) { + ConfigurableApplicationContext applicationContext = SpringApplication.run(ProviderApplication.class, args); + String userName = applicationContext.getEnvironment().getProperty("user.name"); + String userAge = applicationContext.getEnvironment().getProperty("user.age"); + System.err.println("user name :"+userName+"; age: "+userAge); + } +} +---- + +spring-cloud-starter-alibaba-nacos-config 对于Nacos服务端的基础配置没有默认值,因此在运行此Example 之前, 必须使用 bootstrap.properties 配置文件来配置Nacos Server地址,例如: + +[source,properties] +---- +spring.application.name=nacos-config #注意,spring.application.name 必须要放在bootstrap.properties中 +spring.cloud.nacos.config.server-addr=127.0.0.1:8848 +---- + +启动这个Example,可以在控制台看到打印出的值正是在Nacos上预先配置好的值。 + +[source,subs="normal"] +---- +2018-11-02 14:24:51.638 INFO 32700 --- [main] c.a.demo.provider.ProviderApplication : Started ProviderApplication in 14.645 seconds (JVM running for 15.139) +user name :nacos-config-properties; age: 90 +2018-11-02 14:24:51.688 INFO 32700 --- [-127.0.0.1:8848] s.c.a.AnnotationConfigApplicationContext : Refreshing org.springframework.context.annotation.AnnotationConfigApplicationContext@a8c5e74: startup date [Fri Nov 02 14:24:51 CST 2018]; root of context hierarchy +2018-11 +---- + +=== 基于yaml的文件扩展名的配置方式 + +spring-cloud-starter-alibaba-nacos-config 默认对文件扩展名为properties的支持,如果习惯使用yaml格式来作为应用中的基础配置,也是可以支持的。这个时候只需要完成以下两步: + +1、在bootstrap.properties配置文件中显示的来声明使用的文件扩展名。如下所示 +[source,properties] +---- +spring.application.name=nacos-config +spring.cloud.nacos.config.server-addr=127.0.0.1:8848 +spring.cloud.nacos.config.file-extension=yaml #显示的声明使用的文件扩展名 +---- + +2、在Nacos的控制台新增一个dataid为yaml为扩展名的配置,如下所示: + +[source,subs="normal"] +---- +Data ID: nacos-config.yaml + +Group : DEFAULT_GROUP + +配置格式: YAML + +配置内容: user.name: nacos-config-yaml + user.age: 68 +---- + +这两步完成后,重启测试程序,可以在控制台看到输出是以dataid为opensource-service-provider3.yaml配置的值。 + +[source,subs="normal"] +---- +2018-11-02 14:59:00.484 INFO 32928 --- [main] c.a.demo.provider.ProviderApplication:Started ProviderApplication in 14.183 seconds (JVM running for 14.671) +user name :nacos-config-yaml; age: 68 +2018-11-02 14:59:00.529 INFO 32928 --- [-127.0.0.1:8848] s.c.a.AnnotationConfigApplicationContext : Refreshing org.springframework.context.annotation.AnnotationConfigApplicationContext@265a478e: startup date [Fri Nov 02 14:59:00 CST 2018]; root of context hierarchy +---- + +=== 支持配置的动态更新 + +spring-cloud-starter-alibaba-nacos-config 也支持配置的动态更新,如下所示,当变更user.name时,应用程序中能够获取到最新的值: + +[source,subs="normal"] +---- +user name :nacos-config-yaml; age: 68 +user name :nacos-config-yaml; age: 68 +user name :nacos-config-yaml; age: 68 +2018-11-02 15:04:25.069 INFO 32957 --- [-127.0.0.1:8848] o.s.boot.SpringApplication : Started application in 0.144 seconds (JVM running for 71.752) +2018-11-02 15:04:25.070 INFO 32957 --- [-127.0.0.1:8848] s.c.a.AnnotationConfigApplicationContext : Closing org.springframework.context.annotation.AnnotationConfigApplicationContext@10c89124: startup date [Fri Nov 02 15:04:25 CST 2018]; parent: org.springframework.context.annotation.AnnotationConfigApplicationContext@6520af7 +2018-11-02 15:04:25.071 INFO 32957 --- [-127.0.0.1:8848] s.c.a.AnnotationConfigApplicationContext : Closing org.springframework.context.annotation.AnnotationConfigApplicationContext@6520af7: startup date [Fri Nov 02 15:04:24 CST 2018]; root of context hierarchy +user name :nacos-config-yaml-update; age: 68 +user name :nacos-config-yaml-update; age: 68 +---- + +=== 可支持profile粒度的配置 + +spring-cloud-starter-alibaba-nacos-config 在加载配置的时候,不仅仅加载了以dataid为${spring.application.name}.${file-extension:properties}为前缀的基础配置,还加载了dataid为${spring.application.name}-${profile}.${file-extension:properties}的基础配置。在日常开发中如果遇到多套环境下的不同配置,可以打开Spring自带的配置功能。 + +[source,properties] +---- +spring.profiles.active=${deploy.env} +---- + +其中 ${deploy.env}变量的值可以在启动应用时通过-Ddeploy.env=*****来动态指定。比如现在在Nacos上新增了一个dataid为:nacos-config-develop.yaml的基础配置,如下所示: + +[source,subs="normal"] +---- +Data ID: nacos-config-develop.yaml + +Group : DEFAULT_GROUP + +配置格式: YAML + +配置内容: current.env: develop-env +---- + +同时启动应用的时候通过-Ddeploy.env=develop 来指定当前spring.profiles.active的值。 +启动 Spring Boot 应用测试的代码如下: + +[source,java] +---- +@SpringBootApplication +public class ProviderApplication { + + public static void main(String[] args) { + ConfigurableApplicationContext applicationContext = SpringApplication.run(ProviderApplication.class, args); + while(true) { + String userName = applicationContext.getEnvironment().getProperty("user.name"); + String userAge = applicationContext.getEnvironment().getProperty("user.age"); + //获取当前部署的环境 + String currentEnv = applicationContext.getEnvironment().getProperty("current.env"); + System.err.println("in "+currentEnv+" enviroment; "+"user name :" + userName + "; age: " + userAge); + TimeUnit.SECONDS.sleep(1); + } + } +} +---- +启动后,可见控制台的输出结果: + +[source,subs="normal"] +---- +in develop-evn enviroment; user name :nacos-config-yaml-update; age: 68 +2018-11-02 15:34:25.013 INFO 33014 --- [ Thread-11] ConfigServletWebServerApplicationContext : Closing org.springframework.boot.web.servlet.context.AnnotationConfigServletWebServerApplicationContext@6f1c29b7: startup date [Fri Nov 02 15:33:57 CST 2018]; parent: org.springframework.context.annotation.AnnotationConfigApplicationContext@63355449 +---- + +如果需要切换到生产环境,那么只需要更改启动的-Ddeploy.env=product 参数即可。前提是生产环境上Nacos已经添加了该环境的基础配置。例如,现在在生成环境下的Naocs添加了dataid为:nacos-config-product.yaml的配置: + +[source,subs="normal"] +---- +Data ID: nacos-config-product.yaml + +Group : DEFAULT_GROUP + +配置格式: YAML + +配置内容: current.env: product-env +---- + +以-Ddeploy.env=product 启动测试程序,输出结果如下: + +[source,subs="normal"] +---- +in product-env enviroment; user name :nacos-config-yaml-update; age: 68 +2018-11-02 15:42:14.628 INFO 33024 --- [Thread-11] ConfigServletWebServerApplicationContext : Closing org.springframework.boot.web.servlet.context.AnnotationConfigServletWebServerApplicationContext@6aa8e115: startup date [Fri Nov 02 15:42:03 CST 2018]; parent: org.springframework.context.annotation.AnnotationConfigApplicationContext@19bb07ed +---- + +