SpringBoot2.X整合Nacos做配置中心(Spring Cloud Alibaba)

阿里巴巴开源注册配置中心
点击免费观看教学视频

在前面文章中我们学习了Nacos注册中心注册中心传送门,接下来我们来学习配置中心。

Nacos配置中心

配置中心知名的有AplloSpring Cloud Configapplication.yml里边配置的一些系统变量数据, 通常会再Controller里边用@Value 取出使用, 但是你要是想改变他,就要重新改代码,打包,部署,十分麻烦,我们需要让配置文件的值变得动起来,Nacos也采用了Spring Cloud原生注解 @RefreshScope 实现配置自动更新,

  1. 在需要添加配置中心的服务中添加mvn依赖

    
    <dependency>
        <groupId>com.alibaba.cloudgroupId>
        <artifactId>spring-cloud-starter-alibaba-nacos-configartifactId>
    dependency>
    
  2. 修改bootstrap.yml配置文件,这里我以order-service应用为例,新增配置中心属性,如下:

    server:
      port: 6010
    spring:
      application:
        name: order-service
      cloud:
        nacos:
          discovery:
            #必须配置ip地址
            server-addr: localhost:8848
            # 将自己的服务注册到注册中心
            register-enabled: true
          # 配置中心新增部分  
          config:
            server-addr: localhost:8848
            file-extension: yaml
      profiles:
        active: dev
    # 新加属性,作为配置测试        
    merber:
      name: 订单服务中的配置名称
      age: 18  
    

    配置文件加载的优先级(由高到低)

    bootstrap.properties -> bootstrap.yml -> application.properties -> application.yml

  3. OrderController类中添加@RefreshScope注解

    @RestController
    @RequestMapping("order")
    @RefreshScope //动态刷新配置,重要
    public class OrderController {
    
        //Spring常规取值
        @Value("${merber.name:}")
        private String merberName;
        
        @Value("${merber.age:}")
        private Integer merberAge;
    
        @Autowired
        private RestTemplate restTemplate;
    
        @GetMapping("get")
        public String get(){
            String result = restTemplate.getForObject("http://course-service/course/list", String.class);
            return result + ",merberName:" + merberName + ",merberAge:" + merberAge;
        }
    }
    
  4. 给配置中心默认添加一个数据集 (Data Id)

    SpringBoot2.X整合Nacos做配置中心(Spring Cloud Alibaba)_第1张图片

    SpringBoot2.X整合Nacos做配置中心(Spring Cloud Alibaba)_第2张图片

    SpringBoot2.X整合Nacos做配置中心(Spring Cloud Alibaba)_第3张图片

    SpringBoot2.X整合Nacos做配置中心(Spring Cloud Alibaba)_第4张图片

  5. 配置中心命名规则

    • Data Id:

      Nacos Spring Cloud 中,数据集(Data Id) 的配置完整格式如下:

      ${spring.cloud.nacos.config.prefix}-${spring.profiles.active}.${spring.cloud.nacos.config.file-extension},通俗一点就是前缀-环境-扩展名

      • prefix:默认为spring.application.name的值,也可以通过配置项spring.cloud.nacos.config.prefix来配置

        # 手动指定
        spring:
          cloud:
            nacos:
              config:
                prefix: order-service-config
          
        # 若不指定,默认采用应用名的方案
        spring:
          application:
            name: order-sevice #服务名
        
      • active:是配置开发环境的值,一个程序不可能总是在开发环境,可能需要切换到测试环境,上线环境,他们的配置文件都是不同的,所以为了方便环境切换,我们配置不同的开发环境文档。比如以前我们在application.yml中有配置dev、test、prod,其中dev就是开发环境。。

        注意:当spring.profile.active为空时,对应的连接符-也将不存在,dataId的拼接格式变成${prefix}.${file-extension}

        spring:
          profiles:
            active: dev #表示开发环境
        
        
      • file-extension:最后我们需要指定配置文件类型,默认是properties。我们可以自己指定文件类型,比如配置:

        spring:
          cloud:
            nacos:
              config:
                file-extension: yaml #指定配置文件类型为yaml文件
        

        Nacos为我们提供了:TEXT、JSON、XML、YAML、HTML、Properties几种类型

      • 最终配置

        指定好配置文件类型,我们最终在配置中心新增配置文件就是:order-sevice-dev.yaml

    • Group

      ${spring.cloud.nacos.config.group}
      若未配置则取Nacos默认值:DEFAULT_GROUP
      
  6. 启动服务验证

    SpringBoot2.X整合Nacos做配置中心(Spring Cloud Alibaba)_第5张图片

    SpringBoot2.X整合Nacos做配置中心(Spring Cloud Alibaba)_第6张图片

    再次刷新浏览器请求查看

    SpringBoot2.X整合Nacos做配置中心(Spring Cloud Alibaba)_第7张图片

    到此配置中心接入完毕,课件代码详见:https://gitee.com/appdoc/it235.git,tag名:1.2.0

    SpringBoot2.X整合Nacos做配置中心(Spring Cloud Alibaba)_第8张图片

命名空间

Nacos引入了命名空间(Namespace)的概念来进行多环境配置和服务的管理及隔离,Namespace也是官方推荐的多环境支持方案。

例如,你可能有dev,test和prod三个不同的环境,那么使用一套 nacos 集群可以分别建以下三个不同的 namespace。在没有明确指定命名空间配置的情况下, 默认新增的所有配置都在public空间,Nacos控制台对不同的Namespace做了Tab栏分组展示,如下图:

SpringBoot2.X整合Nacos做配置中心(Spring Cloud Alibaba)_第9张图片

SpringBoot2.X整合Nacos做配置中心(Spring Cloud Alibaba)_第10张图片

隔离开发,测试,生产环境可以添加命名空间,然后在bootstrap.yml配置文件添加命名空间的id即可切换到对应的命名空间,使用对应空间下的配置文件:

cloud:
    nacos:
      config:
        namespace: a65a17de-e8f3-4d00-8d87-91549aaa0f02 #对应创建的命名空间的UUID

SpringBoot2.X整合Nacos做配置中心(Spring Cloud Alibaba)_第11张图片

也可以基于微服务来创建命名空间,用每一个微服务名来命名,达到隔离每一个微服务的目的,哪一个微服务需要配置直接去对应的微服务空间下找配置即可,使得项目更加结构化。

SpringBoot2.X整合Nacos做配置中心(Spring Cloud Alibaba)_第12张图片

命名空间课件代码详见:https://gitee.com/appdoc/it235.git,tag名:1.3.0

SpringBoot2.X整合Nacos做配置中心(Spring Cloud Alibaba)_第13张图片

Data ID

Data ID 通常用于组织划分系统的配置集。一个系统或者应用可以包含多个配置集,每个配置集都可以被一个有意义的名称标识。Data ID 通常采用类 Java package的命名规则保证全局唯一性。此命名规则非强制。

大多数时候我们可能更加倾向于将不同的配置分开写到不同的配置文件中,将一个配置文件按功能拆分成不同的文件,然后在程序组合加载到一起组成一个完整的配置文件。比如我想把 DB类日志类 的配置拆分开写到两个配置中,nacos也是支持这种一个配置中心多个配置集这种写法的。

  1. 我们在nacos中新建两个Data ID 分别是db.yamllog.yaml 的文件。

  2. 在配置文件中分别加入部分配置内容

  3. 更改bootstrap.yml中的nacos配置为

    spring:
      cloud:
        nacos:
          config:
            extension-configs[0]:
              data-id: db.yaml
              group: DEFAULT_GROUP   # 默认为DEFAULT_GROUP
              refresh: true   # 是否动态刷新,默认为false
            extension-configs[1]:
              data-id: log.yaml
              group: DEFAULT_GROUP
              refresh: true
    

    为了更加清晰的在多个应用间配置共享的 Data Id,官方推荐使用shared-configs,配置如下:

    spring:
      cloud:
        nacos:
          config:
            shared-configs[0]:
              data-id: db.yaml
              group: DEFAULT_GROUP   # 默认为DEFAULT_GROUP
              refresh: true   # 是否动态刷新,默认为false
            shared-configs[1]:
              data-id: log.yaml
              group: DEFAULT_GROUP
              refresh: true
    
  4. 思考:在这2个文件中出现相同配置,nacos如何选取?

    多个 Data Id 同时配置时,他的优先级关系是 spring.cloud.nacos.config.extension-configs[n].data-id 其中 n 的值越大,优先级越高。

    注意spring.cloud.nacos.config.extension-configs[n].data-id 的值必须带文件扩展名,文件扩展名既可支持 properties,又可以支持 yaml/yml。 此时 spring.cloud.nacos.config.file-extension 的配置对自定义扩展配置的 Data Id 文件扩展名没有影响。

  5. 不同方式配置加载优先级

    Spring Cloud Alibaba Nacos Config 目前提供了三种配置能力从 Nacos 拉取相关的配置。

    1. 通过 spring.cloud.nacos.config.shared-configs[n].data-id 支持多个共享 Data Id 的配置
    2. 通过 spring.cloud.nacos.config.extension-configs[n].data-id 的方式支持多个扩展 Data Id 的配置
    3. 通过内部相关规则(spring.cloud.nacos.config.prefix、spring.cloud.nacos.config.file-extension、spring.cloud.nacos.config.group)自动生成相关的 Data Id 配置

    当三种方式共同使用时,他们的一个优先级关系是:A < B < C

  6. 配置集拆分实践

    以下配置集可以拆分为:db、log、mybatis 三块

Group的使用

这是一个很灵活的配置项,并没有固定的规定,可以用作多环境、多模块、多版本之间区分配置,namespace因其TAB栏的设定就是用作环境隔离。

Group也能干环境隔离这种事,但Group设计出来主要是做同一个环境中的不同服务分组,Group可以把不同的微服务划分到同一个分组里面去;默认所有的配置集都属于: DEFAULT_ GROUP;

常见的分组场景(维度)

不同的应用或组件使用了相同的配置类型,比如:

  • database_url 配置和 MQ_topic 配置
  • 对内配置组,对外配置组

总结

  • dataid:配置文件的名字,相当于主键的作用;
  • group: 不同的系统或微服务的配置文件可以放在一个组里。比如用户系统和订单系统的配置文件都可以放在同个组中;
  • namespace: Namespace 的常用场景之一是不同环境的配置的区分隔离,例如开发测试环境和生产环境的资源(如配置、服务)隔离等;

你可能感兴趣的:(#,AlibabaCloud,#,SpringBoot2.0,Nacos,注册中心,配置中心,AlibabaCloud,java)