谷粒商城-全栈-14 分布式组件-Nacos 配置中心-命名空间分组与加载多配置集

一、nacos命名空间

1、配置隔离

命名空间的主要作用是配置隔离,默认:public(保留空间);默认新增的所有配置都在public空间。

  • 1、开发,测试,生产:利用命名空间来做环境隔离。
    注意:在bootstrap.properties;配置上,需要使用哪个命名空间下的配置
    spring.cloud.nacos.config.namespace=9de62e44-cd2a-4a82-bf5c-95878bd5e871
  • 2、每一个微服务之间互相隔离配置,每一个微服务都创建自己的命名空间,只加载自己命名空间下的所有配置

项目操作步骤:

  • 创建命名空间测试环境test、开发环境dev、生产环境prod
    file

  • prod命名空间下创建配置 gulimall-coupon.properties
    file

coupon.user.name=nacos-prod-default
coupon.user.age=30

修改gulimall-coupon\src\main\resources\bootstrap.properties

spring.application.name=gulimall-coupon
spring.cloud.nacos.config.server-addr=127.0.0.1:8848
# 命名空间prod的唯一ID
spring.cloud.nacos.config.namespace=a9190683-53d9-4dc5-b85d-1d9007c95523

重启服务刷新访问http://localhost:7000/coupon/coupon/test, 获取到的数据环境是prod生成环境的配置。

  • 为每一个微服务创建自己的命名空间
    file

小结:命名空间可以基于环境(dev,test,prod)来隔离,也可以基于微服务(coupon,member,order)来创建隔离,隔离方式有很多,大家可以根据自己的业务特性来

2、配置集

一组相关或者不相关的配置项的集合称为配置集。在系统中,一个配置文件通常就是一个配置集,包含了系统各个方面的配置。例如,一个配置集可能包含了数据源、线程池、日志级别等配置项。

3、配置集ID

配置集ID类似文件名。Data ID:类似文件名。配置集ID是组织划分配置的维度之一。Data ID 通常用于组织划分系统的配置集。一个系统或者应用可以包含多个配置集,每个配置集都可以被一个有意义的名称标识。Data ID 通常采用类 Java 包(如 com.taobao.tc.refund.log.level)的命名规则保证全局的唯一性。此命名规则非强制。

4、配置分组:

默认所有的配置集都属于:DEFAULT_GROUP;
1111,618,1212(比如大促活动可以设置相关的配置和平时分开)

创建配置文件gulimall-coupon.properties,分组Group设置为1111

 coupon.user.name=nacos-gulimall~coupon-1111
coupon.user.age=44

修改gulimall-coupon\src\main\resources\bootstrap.properties

 spring.application.name=gulimall-coupon
spring.cloud.nacos.config.server-addr=127.0.0.1:8848
# 命名空间gulimall-coupon的ID
spring.cloud.nacos.config.namespace=28e89d0b-704f-4771-95e5-c5af84c0a077
spring.cloud.nacos.config.group=1111

5、 项目中的使用

每个微服务创建自己的命名空间,使用配置分组区分环境,dev,test,prod

按照环境分组:
在coupon的命名空间下,创建配置文件gulimall-coupon.properties,分组Group设置为prod

coupon.user.name=nacos-gulimall~coupon-prod
coupon.user.age=44

修改gulimall-coupon\src\main\resources\bootstrap.properties

spring.application.name=gulimall-coupon
spring.cloud.nacos.config.server-addr=127.0.0.1:8848
# 命名空间gulimall-coupon的ID
spring.cloud.nacos.config.namespace=28e89d0b-704f-4771-95e5-c5af84c0a077
spring.cloud.nacos.config.group=prod

file

重启服务刷新访问就可以看到获取到的配置是prod生成组的了。

二、同时加载多个配置集

以前我们将配置属性都写到一个文件 application.yml,为了方便管理,我们可以按照功能拆分出不同的配置文件,然后让nacos来管理。

可以先看看当前的配置文件application.yml

spring:
  datasource:
    username: root
    password: root
    url: jdbc:mysql://192.168.10.10:3306/gulimall_sms
    driver-class-name: com.mysql.cj.jdbc.Driver
  #  配置nacos注册中心
  cloud:
    nacos:
      discovery:
        server-addr: 127.0.0.1:8848
  application:
    name: gulimall-coupon
mybatis-plus:
  mapper-location: classpath:/mapper/**/*.xml
  global-config:
    db-config:
      id-type: auto  # id主键自增
server:
  port: 7000

在nacos创建数据源配置文件datasource.yml,分组设置为dev

spring:
  datasource:
    username: root
    password: root
    url: jdbc:mysql://192.168.10.10:3306/gulimall_sms
    driver-class-name: com.mysql.cj.jdbc.Driver

创建mybatis.yml,分组设置为dev

mybatis-plus:
  mapper-location: classpath:/mapper/**/*.xml
  global-config:
    db-config:
      id-type: auto  # id主键自增

创建other.yml,分组设置为dev

spring:
  #  配置nacos注册中心
  cloud:
    nacos:
      discovery:
        server-addr: 127.0.0.1:8848
  application:
    name: gulimall-coupon
server:
  port: 7000

file

在抽取完之后,注释gulimall-coupon\src\main\resources\application.yml。
在启动的时候同时加载多个配置文件,需要修改gulimall-coupon\src\main\resources\bootstrap.properties

spring.application.name=gulimall-coupon
spring.cloud.nacos.config.server-addr=127.0.0.1:8848
spring.cloud.nacos.config.namespace=28e89d0b-704f-4771-95e5-c5af84c0a077
# spring.cloud.nacos.config.group=prod

spring.cloud.nacos.config.ext-config[0].data-id=datasource.yml
spring.cloud.nacos.config.ext-config[0].group=dev
# 动态刷新,改了配置之后会自动刷新
spring.cloud.nacos.config.ext-config[0].refresh=true    

spring.cloud.nacos.config.ext-config[1].data-id=mybatis.yml
spring.cloud.nacos.config.ext-config[1].group=dev
spring.cloud.nacos.config.ext-config[1].refresh=true

spring.cloud.nacos.config.ext-config[2].data-id=other.yml
spring.cloud.nacos.config.ext-config[2].group=dev
spring.cloud.nacos.config.ext-config[2].refresh=true

重启服务刷新访问http://localhost:7000/coupon/coupon/test ,可以看到启动时的打印日志,已经加载了:

   [main] c.a.c.n.c.NacosPropertySourceBuilder     : Loading nacos data, dataId: 'datasource.yml', group: 'dev'
2020-08-13 16:41:45.947  INFO 53209 --- [           main] c.a.c.n.c.NacosPropertySourceBuilder     : Loading nacos data, dataId: 'mybatis.yml', group: 'dev'
2020-08-13 16:41:45.957  INFO 53209 --- [           main] c.a.c.n.c.NacosPropertySourceBuilder     : Loading nacos data, dataId: 'other.yml', group: 'dev'
2020-08-13 16:41:46.002  INFO 53209 --- [           main] b.c.PropertySourceBootstrapConfiguration : Located property source: [BootstrapPropertySource {name='bootstrapProperties-gulimall-coupon.properties'}, BootstrapPropertySource {name='bootstrapProperties-other.yml'}, BootstrapPropertySource {name='bootstrapProperties-mybatis.yml'}, BootstrapPropertySource {name='bootstrapProperties-datasource.yml'}]
2020-08-13 16:41:46.023  INFO 53209 --- [           main] c.a.g.coupon.GulimallCouponApplication   : No active profile set, falling back to default profiles: default

小结

1、微服务任何配置信息,任何配置文件都可以放在配置中心中
2、只需要在bootstrap.properties说明加载配置中心中哪些配置文件即可
3、@Value,@ConfigurationProperties

  • 以前SpringBoot任何方法从配置文件中获取值,都能使用。
  • 配置中心有的优先使用配置中心中的

为者常成,行者常至