Spring Cloud Alibaba基础教程:Nacos配置的多文件加载与共享配置

前情回顾:html

对于Nacos做为配置中心的使用,经过以前的几篇博文,咱们已经介绍了如何在Nacos中建立配置内容、Nacos配置内容与Spring应用配置之间的对应关系以及实战中多环境下的配置管理方案。git

可是,咱们实际应用过程当中还会常常碰到这样的问题:有时候咱们会对应用的配置根据具体做用作一些拆分,存储在不一样的配置文件中,除了归类不一样的配置以外,也能够便于共享配置给不一样的应用。对于这样的需求,Nacos也能够很好的支持,下面就来具体介绍一下,当使用Nacos时,咱们如何加载多个配置,以及如何共享配置。github

加载多个配置

经过以前的学习,咱们已经知道Spring应用对Nacos中配置内容的对应关系是经过下面三个参数控制的:spring

  • spring.cloud.nacos.config.prefix
  • spring.cloud.nacos.config.file-extension
  • spring.cloud.nacos.config.group

默认状况下,会加载Data ID=${spring.application.name}.propertiesGroup=DEFAULT_GROUP的配置。数组

假设如今有这样的一个需求:咱们想要对全部应用的Actuator模块以及日志输出作统一的配置管理。因此,咱们但愿能够将Actuator模块的配置放在独立的配置文件actuator.properties文件中,而对于日志输出的配置放在独立的配置文件log.properties文件中。经过拆分这两类配置内容,但愿能够作到配置的共享加载与统一管理。app

这时候,咱们只须要作如下两步,就能够实现这个需求:学习

第一步:在Nacos中建立Data ID=actuator.propertiesGroup=DEFAULT_GROUPData ID=log.propertiesGroup=DEFAULT_GROUP的配置内容。ui

第二步:在Spring Cloud应用中经过使用spring.cloud.nacos.config.ext-config参数来配置要加载的这两个配置内容,好比:spa

spring.cloud.nacos.config.ext-config[0].data-id=actuator.properties
spring.cloud.nacos.config.ext-config[0].group=DEFAULT_GROUP
spring.cloud.nacos.config.ext-config[0].refresh=true
spring.cloud.nacos.config.ext-config[1].data-id=log.properties
spring.cloud.nacos.config.ext-config[1].group=DEFAULT_GROUP
spring.cloud.nacos.config.ext-config[1].refresh=true

能够看到,spring.cloud.nacos.config.ext-config配置是一个数组List类型。每一个配置中包含三个参数:data-idgrouprefresh;前两个不作赘述,与Nacos中建立的配置相互对应,refresh参数控制这个配置文件中的内容时候支持自动刷新,默认状况下,只有默认加载的配置才会自动刷新,对于这些扩展的配置加载内容须要配置该设置时候才会实现自动刷新。日志

共享配置

经过上面加载多个配置的实现,实际上咱们已经能够实现不一样应用共享配置了。可是Nacos中还提供了另一个便捷的配置方式,好比下面的设置与上面使用的配置内容是等价的:

spring.cloud.nacos.config.shared-dataids=actuator.properties,log.properties
spring.cloud.nacos.config.refreshable-dataids=actuator.properties,log.properties
  • spring.cloud.nacos.config.shared-dataids参数用来配置多个共享配置的Data Id,多个的时候用用逗号分隔
  • spring.cloud.nacos.config.refreshable-dataids参数用来定义哪些共享配置的Data Id在配置变化时,应用中能够动态刷新,多个Data Id之间用逗号隔开。若是没有明确配置,默认状况下全部共享配置都不支持动态刷新

配置加载的优先级

当咱们加载多个配置的时候,若是存在相同的key时,咱们须要深刻了解配置加载的优先级关系。

在使用Nacos配置的时候,主要有如下三类配置:

  • A: 经过spring.cloud.nacos.config.shared-dataids定义的共享配置
  • B: 经过spring.cloud.nacos.config.ext-config[n]定义的加载配置
  • C: 经过内部规则(spring.cloud.nacos.config.prefixspring.cloud.nacos.config.file-extensionspring.cloud.nacos.config.group这几个参数)拼接出来的配置

要弄清楚这几个配置加载的顺序,咱们从日志中也能够很清晰的看到,咱们能够作一个简单的实验:

spring.cloud.nacos.config.ext-config[0].data-id=actuator.properties
spring.cloud.nacos.config.ext-config[0].group=DEFAULT_GROUP
spring.cloud.nacos.config.ext-config[0].refresh=true

spring.cloud.nacos.config.shared-dataids=log.properties
spring.cloud.nacos.config.refreshable-dataids=log.properties

根据上面的配置,应用分别会去加载三类不一样的配置文件,启动应用的时候,将会在日志中看到以下输出:

2019-02-08 21:23:02.665  INFO 63804 --- [main] o.s.c.a.n.c.NacosPropertySourceBuilder   : Loading nacos data, dataId: 'log.properties', group: 'DEFAULT_GROUP'
2019-02-08 21:23:02.671  INFO 63804 --- [main] o.s.c.a.n.c.NacosPropertySourceBuilder   : Loading nacos data, dataId: 'actuator.properties', group: 'DEFAULT_GROUP'
2019-02-08 21:23:02.677  INFO 63804 --- [main] o.s.c.a.n.c.NacosPropertySourceBuilder   : Loading nacos data, dataId: 'alibaba-nacos-config-client.properties', group: 'DEFAULT_GROUP'

后面加载的配置会覆盖以前加载的配置,因此优先级关系是:A < B < C

参考资料

代码示例

本文示例读者能够经过查看下面仓库的中的alibaba-nacos-config-client项目:

若是您对这些感兴趣,欢迎star、follow、收藏、转发给予支持!

如下专题教程也许您会有兴趣

相关文章
相关标签/搜索