Spring Cloud Alibaba - 学习笔记 - Nacos配置

布满荆棘的人生 2022-11-03 05:29 95阅读 0赞

Spring Cloud Alibaba - 学习笔记 - 配置文件

  • 各类型配置文件常规用法
  • 基本概念
      • 推荐用法
  • Nacos 配置加载规则
    • 指定加载
        1. dataID 默认
        1. group 默认
        1. namespace 默认
    • 加载多个
      • 扩展配置
      • 共享配置
      • 配置例子
  • 配置 - 优先级
      1. spring.profiles.active
      1. 按位置 - 优先级
      1. 按类型 - 优先级
      1. 按方式 - 优先级
  • 动态刷新
    • 方案一、通过 `ConfigurableApplicationContext` 上下文
    • 方案二、`@RefreshScope` 注解
    • 方案三、`扩展配置、共享配置`
  • 参考资料
  • 源码

各类型配置文件常规用法

bootstrap.yml : 指定服务名称、nacos地址等,连接nacos 和读取配置必须的参数。
application.yml : 本地配置信息。一些常规的配置。
${spring.application.name}-${profile}.${file-extension:properties} : nacos上配置,覆盖本地配置。放一些有动态调整需求的配置比如:数据源配置、redis地址等。

基本概念






























关键词 中文名字 默认值 说明
namespace 命名空间 public 习惯上用于区分开发环境
group DEFAULT_GROUP 习惯上用于区分项目,同一个项目放在一组
Data Id 配置文件唯一标识 应用名称+扩展名 对应配置文件名称。注意扩展名保持一致否则读不到。

推荐用法

  1. 官方推荐用 Namespace 区分环境,用 Group 分组管理业务。
  2. 在启动参数中传入-Dspring.profiles.active=dev|test|prod 指定环境。

Nacos 配置加载规则

指定加载

bootstrap.yml 比较常见的写法。

  1. spring:
  2. application:
  3. name: spring-cloud-alibaba-nacos-config # 应用名称
  4. cloud:
  5. nacos:
  6. config:
  7. server-addr: 127.0.0.1:8848 # nacos 地址。端口不能省略。
  8. file-extension: yml #配置文件扩展名

1. dataID 默认

默认拼接:${spring.cloud.nacos.config.prefix}-${spring.profile.active}.${spring.cloud.nacos.config.file-extension}

  • 配置前缀 spring.cloud.nacos.config.prefix 默认值 spring.application.name(服务名)。
  • 当前环境 默认值 spring.profiles.active 。为空时链接符号-会自动去掉。
  • 配置格式 spring.cloud.nacos.config.file-extension 默认 properties

简化后,有profile${spring.application.name}-${spring.profile.active}.properties
简化后,无profile${spring.application.name}.properties

2. group 默认

  • group 默认为 DEFAULT_GROUP,可通过 spring.cloud.nacos.config.group 配置。

3. namespace 默认

  • namespace 默认 Public, 可通过 spring.cloud.nacos.config.namespace 配置。

加载多个

扩展配置

让应用加载多个配置

  • Deprecated
    spring.cloud.nacos.config.ext-config:以数组方式指定配置
  • spring.cloud.nacos.config.extension-configs:以数组方式指定配置

共享配置

让多个应用共享配置(比如一些相同的公共配置)

  • Deprecated
    只认 DEFAULT_GROUP
    spring.cloud.nacos.config.shared-dataids:设置要加载的配置,多个用逗号分隔
    spring.cloud.nacos.config.refreshable-dataids:设置要自动刷新的配置,多个用逗号分隔。不设默认不自动刷新。
  • spring.cloud.nacos.config.shared-configs:以数组方式指定配置

配置例子

官方参考:spring-cloud-alibaba - nacos-config-example - bootstrap.properties

  1. spring:
  2. application:
  3. name: spring-cloud-alibaba-nacos-config # 应用名称
  4. cloud:
  5. nacos:
  6. config:
  7. server-addr: 127.0.0.1:8848 # nacos 地址
  8. namespace: 993d636c-2d9c-4485-9bd3-d2de4ba14f63 # 这里指定test。不填默认空就是 public
  9. # group: DEFAULT_GROUP # 默认 DEFAULT_GROUP 可以省
  10. prefix: log # 配置前缀
  11. file-extension: properties #配置文件扩展名
  12. # file-extension: yml #配置文件扩展名
  13. # file-extension: yaml #配置文件扩展名
  14. # 设置多个配置
  15. extension-configs[0]:
  16. dataid: config-4.yml
  17. group: TEST_GROUP
  18. refresh: true # 自动刷新
  19. extension-configs[1]:
  20. dataid: config-5.yml
  21. group: TEST_GROUP
  22. refresh: true
  23. extension-configs[2]:
  24. dataid: config-6.yml
  25. group: TEST_GROUP
  26. refresh: true
  27. # 共享配置
  28. shared-configs:
  29. - dataid: config-1.yml
  30. refresh: true # 自动刷新
  31. - dataid: config-2.yml
  32. refresh: true
  33. - dataid: config-3.yml
  34. refresh: true

配置 - 优先级

1. spring.profiles.active

注意: bootstrap 正好与 application 相反
文件名.profile:带 profile > 不带 profile 的优先级:bootstrap-dev.yaml > application.yaml

2. 按位置 - 优先级

线上nacos > 线下jar外 > 线下jar内

线下jar包内外的优先级详见: SpringBoot 学习笔记:配置文件基础知识 - 配置优先级

3. 按类型 - 优先级

先加载 bootstrap 后加载 application






































优先级 配置
Top 1 nacos上:${spring.application.name}-${profile}.${file-extension:properties}
Top 2 application.properties
Top 3 application.yml
Top 4 application.yaml
Top 5 bootstrap.properties
Top 6 bootstrap.yml
Top 7 bootstrap.yaml

虽然这里列出来的很花哨,但正常来说项目中我们不可能这样混着写。

4. 按方式 - 优先级

从高到底:

  1. ${spring.application.name}-${profile}.${file-extension} 内置规则(此级别中类型优先级如上)
  2. 扩展配置 spring.cloud.nacos.config.extension-configs 数组索引的优先
  3. 共享配置 spring.cloud.nacos.config.shared-configs 数组索引的优先

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

动态刷新

方案一、通过 ConfigurableApplicationContext 上下文

  1. @Autowired
  2. private ConfigurableApplicationContext context; // 就是启动类中 SpringApplication.run() 返回的对象。
  3. ...
  4. System.out.println("动态更新配置 > "+ context.getEnvironment().getProperty("配置文件中的key") );

方案二、@RefreshScope 注解

在类上添加 @RefreshScope 开启内置配置自动刷新

方案三、扩展配置、共享配置

通过配置项refresh = true 开启。

参考资料

官方文档:Nacos 系统参数介绍(启动nacos用的)
官方文档:Spring Cloud Alibaba Nacos Config
官方文档:Open API 指南(支持通过API接口方式操作 nacos)

官方Demo:使用 Nacos Config Starter 完成 Spring Cloud 应用的配置管理

Spring Cloud Alibaba - 学习笔记 - 准备工作
Nacos 学习笔记:配置管理
SpringBoot 学习笔记:配置文件基础知识

源码

本文Demo源码:代码在模块 spring-cloud-alibaba-nacos-config

发表评论

表情:
评论列表 (有 0 条评论,95人围观)

还没有评论,来说两句吧...

相关阅读