资讯专栏INFORMATION COLUMN

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

Anchorer / 1054人阅读

摘要:通过拆分这两类配置内容,希望可以做到配置的共享加载与统一管理。共享配置通过上面加载多个配置的实现,实际上我们已经可以实现不同应用共享配置了。

前情回顾:

《Spring Cloud Alibaba基础教程:使用Nacos实现服务注册与发现》

《Spring Cloud Alibaba基础教程:支持的几种服务消费方式》

《Spring Cloud Alibaba基础教程:使用Nacos作为配置中心》

《Spring Cloud Alibaba基础教程:Nacos配置的加载规则详解》

《Spring Cloud Alibaba基础教程:Nacos配置的多环境管理》

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

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

加载多个配置

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

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文件中。通过拆分这两类配置内容,希望可以做到配置的共享加载与统一管理。

这时候,我们只需要做以下两步,就可以实现这个需求:

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

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

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

参考资料

Nacos官方文档

代码示例

本文示例读者可以通过查看下面仓库的中的alibaba-nacos-config-client项目:

Github:https://github.com/dyc87112/SpringCloud-Learning/

Gitee:https://gitee.com/didispace/SpringCloud-Learning/

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

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

Spring Boot基础教程

Spring Cloud基础教程

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/77421.html

相关文章

  • 公益:开放一台Nacos服务端给各位Spring Cloud爱好者

    摘要:之前开放过一台公益给大家,以方便大家在阅读我博客中教程时候做实验。由于目前在连载,所以对应的也部署了一台,并且也开放出来,给大家学习测试之用。 之前开放过一台公益Eureka Server给大家,以方便大家在阅读我博客中教程时候做实验。由于目前在连载Spring Cloud Alibaba,所以对应的也部署了一台Nacos,并且也开放出来,给大家学习测试之用。 Nacos控制台 ...

    jk_v1 评论0 收藏0
  • Spring Cloud Alibaba基础教程Nacos的数据持久化

    摘要:在搭建集群之前,我们需要先修改的数据持久化配置为存储。所以,如果启动多个默认配置下的节点,数据存储是存在一致性问题的。为了解决这个问题,采用了集中式存储的方式来支持集群化部署,目前只要支持的存储。 前情回顾: 《Spring Cloud Alibaba基础教程:使用Nacos实现服务注册与发现》 《Spring Cloud Alibaba基础教程:支持的几种服务消费方式》 《Spri...

    endiat 评论0 收藏0
  • Spring Cloud AlibabaSpring Boot、Spring Cloud之间不得不

    摘要:下表整理了目前的版本与版本的兼容关系还未所以,不论您是在读我的基础教程基础教程还是正在连载的系列教程。 这篇博文是临时增加出来的内容,主要是由于最近连载《Spring Cloud Alibaba基础教程》系列的时候,碰到读者咨询的大量问题中存在一个比较普遍的问题:版本的选择。其实这类问题,在之前写Spring Cloud基础教程的时候,就已经发过一篇《聊聊Spring Cloud版本的...

    feng409 评论0 收藏0
  • Spring Cloud Alibaba基础教程:Sentinel Dashboard中修改规则同步

    摘要:下面通过这篇,详细介绍当使用作为配置中心之后,如何实现中修改规则同步到。关于下面改造的原理和分析可以见上一篇中修改规则同步到的头两节内容,这里不重复介绍了。但是由于考虑到与的结合使用,略作修改。主要就是中存储配置的和不要弄错。 上一篇我们介绍了如何通过改造Sentinel Dashboard来实现修改规则之后自动同步到Apollo。下面通过这篇,详细介绍当使用Nacos作为配置中心之后...

    Rocko 评论0 收藏0
  • 说说我为什么看好Spring Cloud Alibaba

    摘要:最近对基础教程系列的催更比较多,说一下最近的近况因为打算一起更新。再次,对于中国用户来说,还有一个非常特殊的意义它将曾经红极一时的,以及阿里巴巴的强力消息中间件融入体系。 最近对《Spring Cloud Alibaba基础教程》系列的催更比较多,说一下最近的近况:因为打算Spring Boot 2.x一起更新。所以一直在改博客Spring Boot专题页和Git仓库的组织。由于前端技...

    yhaolpz 评论0 收藏0

发表评论

0条评论

Anchorer

|高级讲师

TA的文章

阅读更多
最新活动
阅读需要支付1元查看
<