Spring Cloud for Alibaba 之 Nacos 配置管理 (3)

    用Nacos 当作注册中心,启动 应用之后, 接下来就学习 使用Nacos的 配置中心功能!

   Nacos当作配置中心使用,配置简单,但是文档不是很好找。

   配置参考官方wiki:https://github.com/alibaba/spring-cloud-alibaba/wiki/Nacos-config

   本项目源码 git: https://github.com/xujianguo1/alicloud-demo.git

一、 配置&引入

      1. pom 引入对应的starter

     <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>
            <version>${nacos-boot-start.version}</version>
        </dependency>

     2. 在resources下新建配置文件: bootstrap.properties ,  根据springboot规范,文件名必须是bootstrap ,后缀可以是 properties、xml、yml、yaml的 一种。

     配置文件填入基本内容:     

 1 server.name=server-product-demo  
 2 #tomcat端口号
 3 server.port=8082    6 
 7 #应用名,不配置data-id 则默认为data-id前缀
 8 spring.application.name=product-demo
 9 #nacos配置信息
10 spring.cloud.nacos.config.server-addr=127.0.0.1:8848
11 #nacos 的dataId后缀
12 spring.cloud.nacos.config.file-extension=yml

再将其他配置,放入nacos 上面即可,nacos上配置示例:

 在nacos上面,新建配置文件, dataId、group 是可以随意填写的,只要在同一个命名空间下, dataId + Group组合一起,不重复即可。

 应用加载配置的时候,加载规则如下:

 1. 未配置profile : 加载${spring.application.name}.${file-extension:properties} , 本例加载:product-demo.yml

 2. 配置profile=dev , 在加载${spring.application.name}.${file-extension:properties} 配置文件后,

     还要加载:${spring.application.name}-${profile}.${file-extension:properties}  这个配置文件,即:product-demo-dev.yml

如果未加载到,则控制台会报错, 加载到的配置文件,可以从以下2个地方查看:

  1. 控制台日志,

  2. springboot admin server的 Enviroment 里面查看。

 

二、 Nacos完整配置

  在nacos 的控制台,server端的配置比较少。

 Nacos Server端配置:

 

   1. 可以新建不同 namespace ,在不同命名空间新建不同配置文件。

   2. 新建配置文件,dataId +groupId 不同即可,文件内容自己填写。选择配置格式,可以触发相应的规则检查。

Nacos Client配置:

 1 nacos:
 2   server-address: 127.0.0.1
 3   port: 8848
 4 
 5 spring:
 6   profiles:
 7     active: prod #指定开发环境,profile
 8   application:
 9     name: order-demo #应用名,默认的dataId前缀
10   cloud:
11     nacos:
12       config:
13         server-addr: ${nacos.server-address}:${nacos.port} #nacos地址
14         file-extension: yml  #应用扩展名.
15         shared-dataids: constants.yml,url-${spring.profiles.active}.yml  #shareDataId 配置,dataIds是写死的,可以手动引入profile
16         ext-config[0].dataid: common.yml   #ext-config[0] 的dataId,这里会直接查找common.yml ,profile配置不起作用
17         ext-config[0].group: common-config  # ext-config[0] 的group
18         ext-config[1].dataid: ${spring.application.name}_biz.yml  #配置ext-config[1]配置文件,不写group则用默认分组
19         ext-config[1].refresh: true   #是否 动态刷新配置文件

  1. ext-config[n] 数字越大加载的优先级越高。
  2. 根据自身业务需求,可以配置多个ext-config。
  3. ext-config[n].data-id 的值是完整的dataId
  4. 集群环境和单机配置一样
# namespace 命名空间配置未列出,第三节讲

以上配置为 项目order-demo 的 client配置, profile = prod, 最终会加载的配置文件如下:

      shared-dataids: constants.yml, url-prod.yml

  ext1 : common.yml ,gourp=common-config

  ext2: order-demo_biz.yml

  默认:order-demo.yml

  默认profile: order-demo-prod.yml

显示配置了4个文件,其实一共加载了6个文件,配置优先级依次递增。 即默认profile的 order-demo-prod.yml 里面配置优先级最高,会覆盖之前的配置。

官方文档里面内容如下:

三、多环境切换配置

      一个系统,必然涉及到多套环境, 测试、开发、性能测试、预发、线上等环境。

     Nacos 也是支持这2中配置的,支持的方式有2种 :

     1. 通过spring.profile 方式支持。 例如 order-demo里面的 spring.profile.active=prod

     2. 通过namespace 方式支持。  官方示例: spring.cloud.nacos.config.namespace=b3404bc0-d7dc-4855-b519-570ed34b62d7

 

     设置Profile 方式

   如上 order-demo 示例, 可以设置profile ,然后再 配置里面 带上 ${spring.profiles.active} 即可,在启动应用的时候,设置profile参数,达到动态切换配置文件的目的。

       profile 方式弊端:

                1. 配置繁琐,

                2.在同一个 命名空间下,文件数量过多,不方便查看 

                3.不利于后续的权限控制(虽然nacos目前还没有 权限控制功能,后续肯定会添加),nacos的权限控制计划时根据namespace的多租户方案

    设置namespece方式(推荐):

        nacos可以自定义多个namespace,在namespace下再自定义配置信息,如下:  

       

 

 如 product-demo所示,不配置profile, 在启动的时候 设置启动参数: 

 -Dspring.cloud.nacos.config.namespace=3df1f638-2297-411c-94ff-7382fd3327a0 

 Intelij 配置如下:

 

四、 其他  

   配置动态刷新

     在client配置动态刷新后,代码里面还要配置 @RefreshScope ,@Value 注解的值才会更新。否则在Nacos 控制台修改了配置的值, 应用的日志里面也打印了 配置刷新信息,并且在SpringBoot AdminServer里面也看到了最       新的变更,但是在程序里面 值还是不会变化的。 

Springboot Admin 显示buildInfo 信息:

     能直观看到buildInfo信息,对线上排错是很方便的。 在将配置放入nacos,启动配置放入bootstrap.yml 后,自定义的info信息在 SpringBoot Admin Server里面就会失效,根据这篇blog设置,可以重新显示 相关的信息:https://blog.csdn.net/qq_26000415/article/details/79234812  

 

 Nacos配置使用比较简单,可能还要1、2项配置没用展示,大家可以根据官方文档摸索。

 项目是个连续项目,nacos配置部分已打分支,后续会添加spring cloud的其他内容。   

  源码地址: https://github.com/xujianguo1/alicloud-demo.git    分支&Release:NacosConfig

 

 如有其他问题或者疑难,欢迎留言,大家一起探讨!

 

posted on 2019-07-24 16:31  qingcaolin  阅读(989)  评论(0编辑  收藏  举报

导航