《Spring Cloud Alibaba基础教程》连载中,关注我一起学期!前情回顾:

  • 《使用Nacos实现服务注册与发现》

  • 《支持的几种服务消费方式》

  • 《使用Nacos作为配置中心》

  • 《Nacos配置的加载规则详解》

  • 《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

默认情况下,会加载 DataID=${spring.application.name}.propertiesGroup=DEFAULT_GROUP的配置。

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

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

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

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

  1. spring.cloud.nacos.config.ext-config[0].data-id=actuator.properties

  2. spring.cloud.nacos.config.ext-config[0].group=DEFAULT_GROUP

  3. spring.cloud.nacos.config.ext-config[0].refresh=true

  4. spring.cloud.nacos.config.ext-config[1].data-id=log.properties

  5. spring.cloud.nacos.config.ext-config[1].group=DEFAULT_GROUP

  6. spring.cloud.nacos.config.ext-config[1].refresh=true

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

共享配置

通过上面加载多个配置的实现,实际上我们已经可以实现不同应用共享配置了。但是Nacos中还提供了另外一个便捷的配置方式,比如下面的设置与上面使用的配置内容是等价的:

  1. spring.cloud.nacos.config.shared-dataids=actuator.properties,log.properties

  2. spring.cloud.nacos.config.refreshable-dataids=actuator.properties,log.properties

  • spring.cloud.nacos.config.shared-dataids参数用来配置多个共享配置的 DataId,多个的时候用用逗号分隔

  • spring.cloud.nacos.config.refreshable-dataids参数用来定义哪些共享配置的 DataId在配置变化时,应用中可以动态刷新,多个 DataId之间用逗号隔开。如果没有明确配置,默认情况下所有共享配置都不支持动态刷新

配置加载的优先级

当我们加载多个配置的时候,如果存在相同的key时,我们需要深入了解配置加载的优先级关系。

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

  • A: 通过 spring.cloud.nacos.config.shared-dataids定义的共享配置

  • B: 通过 spring.cloud.nacos.config.ext-config[n]定义的加载配置

  • C: 通过内部规则( spring.cloud.nacos.config.prefix、 spring.cloud.nacos.config.file-extension、 spring.cloud.nacos.config.group这几个参数)拼接出来的配置

要弄清楚这几个配置加载的顺序,我们从日志中也可以很清晰的看到,我们可以做一个简单的实验:

  1. spring.cloud.nacos.config.ext-config[0].data-id=actuator.properties

  2. spring.cloud.nacos.config.ext-config[0].group=DEFAULT_GROUP

  3. spring.cloud.nacos.config.ext-config[0].refresh=true

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

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

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

  1. 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'

  2. 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'

  3. 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、收藏、转发给予支持!

号外:最近整理了之前编写的一系列内容做成了PDF,关注我并回复相应口令获取:

- 001 领取:《Spring Boot基础教程》

- 002 领取:《Spring Cloud基础教程》

更多内容陆续奉上,敬请期待 

- END -

 近期热文:

  • PPT写得好的人,为什么都如此遭人痛恨?

  • Spring Cloud Greenwich F版升级分享

  • Spring Cloud Greenwich 正式发布

  • 用认知和人性来做最棒的程序员

  • Gitlab-CI持续集成的完整实践

  • “三次握手,四次挥手”你真的懂吗?

  • “拼多多”被薅的问题出在哪儿?

  • 在前后端分离的路上承受了多少痛?

  • 你真的会高效的在GitHub上搜索开源项目吗?

  • 中台是个什么鬼?

看完,赶紧点个“好看”鸭

点鸭点鸭

↓↓↓↓

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

  1. Spring Cloud Alibaba基础教程:Sentinel使用Nacos存储规则

    点击蓝色"程序猿DD"关注我哟 加个"星标",不忘签到哦 通过上一篇<使用Sentinel实现接口限流>的介绍,相信大家对Sentinel已经有了初 ...

  2. Spring Cloud Alibaba基础教程:Nacos的集群部署

    点击蓝色"程序猿DD"关注我哟 <Spring Cloud Alibaba基础教程>连载中,关注我一起学习!前情回顾: <使用Nacos实现服务注册与发现> ...

  3. Spring Cloud Alibaba基础教程:Nacos的数据持久化

    <Spring Cloud Alibaba基础教程>连载中,关注我一起学习!前情回顾: <使用Nacos实现服务注册与发现> <支持的几种服务消费方式> <使 ...

  4. Spring Cloud Alibaba基础教程:Sentinel Dashboard中修改规则同步到Nacos

    上一篇我们介绍了如何通过改造Sentinel Dashboard来实现修改规则之后自动同步到Apollo.下面通过这篇,详细介绍当使用Nacos作为配置中心之后,如何实现Sentinel Dashbo ...

  5. Spring Cloud Alibaba基础教程:Nacos的数据持久化 1

    前情回顾: <Spring Cloud Alibaba基础教程:使用Nacos实现服务注册与发现> <Spring Cloud Alibaba基础教程:支持的几种服务消费方式> ...

  6. Spring Cloud Alibaba基础教程:Sentinel Dashboard同步Apollo存储规则

    点击蓝色"程序猿DD"关注我哟 加个"星标",不忘签到哦 在之前的两篇教程中我们分别介绍了如何将Sentinel的限流规则存储到Nacos和Apollo中.同时 ...

  7. Spring Cloud Alibaba基础教程:Sentinel使用Apollo存储规则

    点击蓝色"程序猿DD"关注我哟 加个"星标",不忘签到哦 上一篇我们介绍了如何通过Nacos的配置功能来存储限流规则.Apollo是国内用户非常多的配置中心,所 ...

  8. Spring Cloud Alibaba基础教程:使用Sentinel实现接口限流

    点击蓝色"程序猿DD"关注我哟 加个"星标",不忘签到哦 最近管点闲事浪费了不少时间,感谢网友们的留言提醒. 及时纠正路线,继续跟大家一起学习Spring Cl ...

  9. Spring Cloud Alibaba基础教程版本升级:0.2.1-gt;0.2.2

    最近Spring Cloud Alibaba发布了最新版本,其中包含了一些比较重要的内容,比如:Nacos 1.0.0支持,Dubbo的支持等.所以把之前的系列文章中内容以及代码案例都做了升级,其中包 ...

最新文章

  1. 写给未来程序员的建议
  2. 1.08亿条在线赌场信息泄露,来源指向 ElasticSearch
  3. django中判断当前user具有是否有对模块的增删改查权限
  4. php redis管道,php redis pipeline怎么用 - 翟码农技术博客
  5. 移动web开发ajax缓存操作
  6. Python基础教程:一个单列split转换为多行的练习题
  7. div css页面布局 模板_HTML 布局
  8. 如何实现32.5万笔/秒的交易峰值?阿里交易系统TMF2.0技术揭秘
  9. testbench常用任务之SPI slave输出数据
  10. MySQL为什么用 B+ 树,不用 B 树?
  11. git钩子放服务器_如何使用Git 钩子来自动化开发和部署任务
  12. 秒懂文件路径 ‘/‘ , ‘./‘ , ‘../‘ 的区别
  13. 数字图像处理技术详解程序_FCA在自动驾驶和智能网联技术最近五年变革
  14. SpringCloud与Ribbon整合的时候是如何提供RestTemplate负载均衡功能?
  15. MacOS罗技鼠标定义的功能键经常失灵
  16. Gos —— 实现系统调用
  17. linux安装rlwrap 解决sqlplus不能上下翻问题
  18. 点餐系统mysql设计,外卖点餐系统数据库设计.doc
  19. monkey快速入门
  20. Oracle select表要带双引号的原因

热门文章

  1. drupal cve-2018-7600 远程代码执行漏洞 简介
  2. linux ssh连接 出现 Host key verification failed 错误 解决方法
  3. mysql 导入文件提示 --secure-file-priv option 问题
  4. Linux Shell 进制错误 - value too great for base
  5. Linux C 获取本地 ip mac 域名对应 ip
  6. linux screen 命令详解(后台执行linux命令)
  7. 无线传感器网络--分簇或者不分簇
  8. mysql某个表的列除以2_mysql常见面试题(二)
  9. java中字符串的创建_【转载】 Java中String类型的两种创建方式
  10. cisco+++mysql_搭建cacti监控linux服务器,cisco,华为,mysql,