Spring Cloud集成Nacos配置中心

目录

  • 集成配置中心
    • 前提条件
    • 快速启动
    • file-exetension与配置格式
      • 关系
    • 支持自定义 namespace 的配置
    • 支持自定义 Group 的配置
    • 支持自定义扩展的 Data Id 配置
      • 拓展配置集
      • 共享配置集
      • 配置的优先级

集成配置中心

SpringCloud可以很方便的与Nacos的配置中心集成起来

前提条件

启动Nocas服务

快速启动

  1. 添加依赖
<dependency>
    <groupId>com.alibaba.cloudgroupId>
    <artifactId>spring-cloud-starter-alibaba-nacos-configartifactId>
    <version>${latest.version}version>
dependency>
  1. bootstrap.yml中添加配置,注意,必须是bootstrap.ymlbootstrap.properties
spring:
  application:
    name: example
  cloud:
    nacos:
      server-addr: localhost:8848
      config:
        server-addr: localhost:8848
        file-extension: json
server:
  port: 8080

在 Nacos Spring Cloud 中,dataId的完整格式如下:

${prefix}-${spring.profile.active}.${file-extension}
  • prefix:默认为spring.application.name的值,也可以通过配置项spring.cloud.nacos.config.prefix来配置
  • spring.profile.active:即为当前环境对应的 profile,详情可以参考 Spring Boot文档。注意:当spring.profile.active为空时,对应的连接符-也将不存在,dataId的拼接格式变成${prefix}.${file-extension}
  • file-exetension:为配置内容的数据格式,可以通过配置项spring.cloud.nacos.config.file-extension来配置,推荐使用json、yaml、properties的格式,默认为properties

应用自己生成的dataId是可以忽略"file-exetension"的如上所示,dataId则可以是example.json和example

  1. 通过 Spring Cloud 原生注解@RefreshScope实现配置自动更新
@RestController
@RequestMapping("/config")
@RefreshScope
public class ConfigController {
  // 从配置文件中获取message默认值,后面可以在配置中心配置这个message
  @Value("${message:原消息}")
  private String message;

  @GetMapping("get")
  public Object get(){
    JSONObject json = new JSONObject();
    json.put("msg",message);
    return json;
  }
}
  1. 过调用 Nacos Open API 向 Nacos Server 发布配置或在Nacos控制台发布配置;dataId为example.json,group=DEFAULT_GROUP
  2. 访问/config/get查看配置的变化

file-exetension与配置格式

在Nacos控制台的 配置管理>配置列表>具体配置 中可以看出配置集的解析格式具体是什么,如图
在这里插入图片描述

关系

file-exetension与配置格式的关系的一一对应的,应用对配置的解析格式是以配置本身在bootstrap.yml中的配置决定,而不是Nacos控制台,所以在应用中我们采取的配置解析格式(file-exetension)要与Nacos控制台的选择一致

支持自定义 namespace 的配置

用于进行租户粒度的配置隔离。不同的命名空间下,可以存在相同的 Group 或 Data ID 的配置。Namespace 的常用场景之一是不同环境的配置的区分隔离,例如开发测试环境和生产环境的资源(如配置、服务)隔离等

在没有明确指定 ${spring.cloud.nacos.config.namespace} 配置的情况下, 默认使用的是 Nacos 上 Public 这个namespae。如果需要使用自定义的命名空间,可以通过以下配置来实现

# 此配置必须在bootstrap.yml中配置
spring:
  cloud:
    nacos:
      config:
        namespace: 命名空间ID,在Nacos控制台看

支持自定义 Group 的配置

在没有明确指定 ${spring.cloud.nacos.config.group} 配置的情况下, 默认使用的是 DEFAULT_GROUP 。如果需要自定义自己的 Group,可以通过以下配置来实现:

# 此配置必须在bootstrap.yml中配置
spring:
    cloud:
        nacos:
            config:
                group: DEVELOP_GROUP

支持自定义扩展的 Data Id 配置

在某些情况下我们可能需要的配置集不止一个而是多个,甚至某些还是共享的,我们可以大概分为两类

  • 应用自己生成的私有配置集
  • 应用依赖的外部配置集
    • 拓展配置集
    • 共享配置集

拓展配置集

拓展配置集是根据私有配置集的不足提供出来的额外配置,应该是可选的配置值,但也可以当做共享配置集使用,为了更容易解读,当我们需要从私有配置集中进行额外补充时我们应该使用拓展配置集

案例:

spring:
  application:
    name: example
  cloud:
    nacos:
      server-addr: localhost:8848
      config:
        server-addr: localhost:8848
        file-extension: yaml
        group: DEV_GROUP
        extension-configs:
          - data-id: ext1.yaml
            group: DEV_GROUP
          - data-id: ext2.yaml
            group: DEV_GROUP
            refresh: true

上面案例中配置了两个拓展配置集并分配在DEV_GROUP组上,其中ext1.yaml不实时刷新,这里ext2.yaml优先级大于ext1.yaml,因为优先级大小的排序是extension-configs[n]中n越大优先级越大,配置集的配置值就越优先

  • data-id:Nacos上配置集的ID,这里要注意的是这个data-id一定要有后缀名
  • group:自定义 Data Id 所在的组,不明确配置的话,默认是 DEFAULT_GROUP
  • refresh:控制该 Data Id 在配置变更时,是否支持应用中可动态刷新, 感知到最新的配置值。默认是false,代表启动时获取一次

共享配置集

共享配置集是当这个配置集要分配给不同应用的时候需要的

案例:

spring:
  application:
    name: example
  cloud:
    nacos:
      server-addr: localhost:8848
      config:
        server-addr: localhost:8848
        file-extension: yaml
        group: DEV_GROUP
        shared-configs:
          - data-id: sha1.json
            group: DEV_GROUP
            refresh: true
          - data-id: sha2.properties
            group: DEV_GROUP
            refresh: true

上面案例中配置了两个共享配置集并分配在DEV_GROUP组上,且都实时刷新,这里sha2.properties优先级大于sha1.json,因为优先级大小的排序是extension-configs[n]中n越大优先级越大,配置集的配置值就越优先

  • data-id:Nacos上配置集的ID,这里要注意的是这个data-id一定要有后缀名
  • group:自定义 Data Id 所在的组,不明确配置的话,默认是 DEFAULT_GROUP
  • refresh:控制该 Data Id 在配置变更时,是否支持应用中可动态刷新, 感知到最新的配置值。默认是false,代表启动时获取一次

配置的优先级

目前提供了三种配置能力从 Nacos 拉取相关的配置

  • A: 通过 spring.cloud.nacos.config.shared-configs[n].data-id 支持多个共享 Data Id 的配置
  • B: 通过 spring.cloud.nacos.config.extension-configs[n].data-id 的方式支持多个扩展 Data Id 的配置
  • C: 通过内部相关规则(应用名、应用名+ Profile )自动生成相关的 Data Id 配置

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

你可能感兴趣的:(JAVA)