当前位置: 首页 > news >正文

Springcloud-Nacos

配置中心

参考掘金内容
简书
简书实时配置

  在springboot项目启动生命周期中preapareContext,完成容器的前置处理。里面有个步骤,遍历ApplicationContextInitializer的实现,调用其初始化方法。
在这里插入图片描述
在这里插入图片描述
  我们可以看到,在spring-cloud-context的项目中,自动注入了BootstrapConfiguration的实现。
在这里插入图片描述
  在springcloud规范中,提供了PropertySourceBootstrapConfiguration 继承ApplicationContextInitializer。另外还提供了PropertySourceLocator,两者配合完成配置中心的接入。
在这里插入图片描述
  看这个initialize初始化逻辑,会获取容器中所有PropertySourceLocator实现。然后调用其locateCollection方法进行配置的获取。获取到配置后,调用insertPropertySouorces方法将所有的PropertySource添加到Spring的环境变量environment中。

项目引入依赖

  <dependency><groupId>com.alibaba.cloud</groupId><artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId></dependency>

  注解注入BootStrapConfiguration的实现类。NacosConfigBootstrapConfiguration
在这里插入图片描述

NacosConfigBootstrapConfiguration

  我们可以发现,在这个配置类中,向容器中注入了NacosPropertySourceLocator,它实现PropertySourceLocator接口。
在这里插入图片描述
  NacosPropertySourceLocator#locate方法如下。  nacosConfigProperties配置类,读取前缀spring.cloud.nacos.config的配置项。
  ConfigService是通过nacosConfigProperties创建的对象。默认是NacosConfigService。
  loadSharedConfiguration加载spring.cloud.nacos.config.shared-configs下面配置dataId,group对应的nacos上的配置数据。
  loadExtConfiguration加载spring.cloud.nacos.config.extension-configs下面配置dataId,group对应的nacos上的配置数据。
  loadApplicationConfiguration加载应用配置。根据spring.cloud.nacos.config下配置的文件名,group,后缀名等取nacos获取配置。
还会从environment中获取profile,拼接到dataId名称中,获取当前运行环境的配置

	@Overridepublic PropertySource<?> locate(Environment env) {nacosConfigProperties.setEnvironment(env);// 获取ConfigServiceConfigService configService = nacosConfigManager.getConfigService();if (null == configService) {log.warn("no instance of config service found, can't load config from nacos");return null;}long timeout = nacosConfigProperties.getTimeout();nacosPropertySourceBuilder = new NacosPropertySourceBuilder(configService,timeout);String name = nacosConfigProperties.getName();// 构建应用配置的名称前缀String dataIdPrefix = nacosConfigProperties.getPrefix();if (StringUtils.isEmpty(dataIdPrefix)) {// spring.cloud.nacos.config.p

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • OpenStack入门体验
  • 掩码、反掩码、通配符的区别和计算方式
  • 使用s3cmd 2.x 与 Cyberduck 管理在 DigitalOcean Spaces 对象存储中的数据
  • 全网最适合入门的面向对象编程教程:30 Python的内置数据类型-object根类
  • 缓存策略自定义:Laravel应用性能优化秘籍
  • 虚拟机(CentOS7)安装jenkins
  • ubuntu安装nginx以及php的部署
  • STL—vector—模拟实现【深度理解vector】【模拟实现vector基本接口】
  • WebLogic: CVE-2020-14882/14883【getshell】
  • C语言自定义类型结构体与位段超详解
  • 如果一台Riscv FreeBSD系统没有pkg怎么办?
  • 基于深度学习的自动化模型设计
  • VS Code设置C++编译器路径
  • 《巴菲特的伯克希尔崛起》
  • 学Python可少不了项目练手,这8个小项目有趣又实用,小白也能做出来_python练手项目,python教程
  • [分享]iOS开发-关于在xcode中引用文件夹右边出现问号的解决办法
  • DOM的那些事
  • JavaScript 基础知识 - 入门篇(一)
  • JSONP原理
  • linux学习笔记
  • Node项目之评分系统(二)- 数据库设计
  • React组件设计模式(一)
  • XML已死 ?
  • Yeoman_Bower_Grunt
  • 闭包,sync使用细节
  • 第三十一到第三十三天:我是精明的小卖家(一)
  • 复杂数据处理
  • 将回调地狱按在地上摩擦的Promise
  • 容器服务kubernetes弹性伸缩高级用法
  • 如何正确配置 Ubuntu 14.04 服务器?
  • Java总结 - String - 这篇请使劲喷我
  • # windows 运行框输入mrt提示错误:Windows 找不到文件‘mrt‘。请确定文件名是否正确后,再试一次
  • # 移动硬盘误操作制作为启动盘数据恢复问题
  • ### Error querying database. Cause: com.mysql.jdbc.exceptions.jdbc4.CommunicationsException
  • $var=htmlencode(“‘);alert(‘2“); 的个人理解
  • (20050108)又读《平凡的世界》
  • (4)logging(日志模块)
  • (C#)获取字符编码的类
  • (C语言)fread与fwrite详解
  • (Matlab)基于蝙蝠算法实现电力系统经济调度
  • (分享)一个图片添加水印的小demo的页面,可自定义样式
  • (十八)SpringBoot之发送QQ邮件
  • (五)MySQL的备份及恢复
  • (转)ABI是什么
  • (转)Groupon前传:从10个月的失败作品修改,1个月找到成功
  • .mp4格式的视频为何不能通过video标签在chrome浏览器中播放?
  • .NET 6 Mysql Canal (CDC 增量同步,捕获变更数据) 案例版
  • .Net 6.0 处理跨域的方式
  • .NET CORE 3.1 集成JWT鉴权和授权2
  • .NET Core 和 .NET Framework 中的 MEF2
  • .net redis定时_一场由fork引发的超时,让我们重新探讨了Redis的抖动问题
  • .net web项目 调用webService
  • @data注解_SpringBoot 使用WebSocket打造在线聊天室(基于注解)
  • @EnableWebSecurity 注解的用途及适用场景
  • @property python知乎_Python3基础之:property