假设现在有这样的一个需求:我们想要对所有应用的Actuator模块以及日志输出做统一的配置管理。所以,我们希望可以将Actuator模块的配置放在独立的配置文件actuator.properties文件中,而对于日志输出的配置放在独立的配置文件log.properties文件中。通过拆分这两类配置内容,希望可以做到配置的共享加载与统一管理。

加载多个配置

nacos提供了两种方式加载多个配置,分别是spring.cloud.nacos.config.extension-configsspring.cloud.nacos.config.shared-configs

使用extension-configs

第一步:在Nacos中新建配置
image.png
image.png
image.png
第二步:在Spring Cloud应用中通过使用spring.cloud.nacos.config.extension-configs参数来配置要加载的这两个配置内容

  1. spring.application.name=alibaba-nacos-config-client
  2. server.port=8002
  3. spring.cloud.nacos.config.server-addr=127.0.0.1:8848
  4. spring.cloud.nacos.config.extension-configs[0].data-id=actuator.properties
  5. spring.cloud.nacos.config.extension-configs[0].group=DEFAULT_GROUP
  6. spring.cloud.nacos.config.extension-configs[0].refresh=true
  7. spring.cloud.nacos.config.extension-configs[1].data-id=log.properties
  8. spring.cloud.nacos.config.extension-configs[1].group=DEFAULT_GROUP
  9. spring.cloud.nacos.config.extension-configs[1].refresh=true

spring.cloud.nacos.config.extension-configs配置是一个数组List类型。每个配置中包含三个参数:data-idgrouprefresh;前两个不做赘述,与Nacos中创建的配置相互对应,refresh参数控制这个配置文件中的内容时候支持自动刷新,默认情况下,只有默认加载的配置才会自动刷新,对于这些扩展的配置加载内容需要配置refresh才会实现自动刷新。

第三步:修改EchoController

  1. @Slf4j
  2. @RefreshScope
  3. @RestController
  4. static class EchoController {
  5. @Value("${title.en}")
  6. private String titleEn;
  7. @Value("${log}")
  8. private Boolean log;
  9. @GetMapping("echo")
  10. public String echo() {
  11. return titleEn + ", log = " + log;
  12. }
  13. }

第四步:curl检查配置读取和自动刷新

  1. wujiawei@wujiaweideMacBook-Pro ~ % curl http://localhost:8002/echo
  2. log.properties, log = false
  3. wujiawei@wujiaweideMacBook-Pro ~ % curl http://localhost:8002/echo
  4. log.properties, log = true

使用shared-configs

程序员DD教程中使用的shared-dataidsrefreshable-dataids,这两个配置在新版本中已经失效,官方建议使用shared-configs进行代替

image.pngimage.png
第一步:修改bootstrap.properties

  1. spring.application.name=alibaba-nacos-config-client
  2. server.port=8002
  3. spring.cloud.nacos.config.server-addr=127.0.0.1:8848
  4. spring.cloud.nacos.config.shared-configs[0].data-id=actuator.properties
  5. spring.cloud.nacos.config.shared-configs[0].group=DEFAULT_GROUP
  6. spring.cloud.nacos.config.shared-configs[0].refresh=true
  7. spring.cloud.nacos.config.shared-configs[1].data-id=log.properties
  8. spring.cloud.nacos.config.shared-configs[1].group=DEFAULT_GROUP
  9. spring.cloud.nacos.config.shared-configs[1].refresh=true

第二步:curl检查配置读取和自动刷新

  1. wujiawei@wujiaweideMacBook-Pro ~ % curl http://localhost:8002/echo
  2. log.properties, log = false
  3. wujiawei@wujiaweideMacBook-Pro ~ % curl http://localhost:8002/echo
  4. log.properties, log = true

配置加载的优先级:

  • [0] < [1]
  • 内部规则(group + dataid) > extension-configs > shared-configs

    代码示例

  • Github:

  • Gitee: