前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >SpringCloud 配置中心服务端配置解析流程分析

SpringCloud 配置中心服务端配置解析流程分析

作者头像
猿芯
发布2020-09-10 15:17:13
1.7K0
发布2020-09-10 15:17:13
举报

环境准备

  1. 启动 Eureka
  2. 启动 ConfigServer
  3. 启动 aiportal-wsm-service 微服务
  4. Gitlab 配置文件:aiportal-wsm-service、globa、,dbconfig 等yml文件

配置解析入口

在启动 aiportal-wsm-service 微服务程序时,我们可以从 console 输出日志定位出 ConfigServicePropertySourceLocator 类调用了配置中心接口地址:http://localhost:8888。

接着 ConfigServicePropertySourceLocator 输出 bootstrap.yml 配置的配置中心地址属性,其目的是从配置中心拉去 dev 分支下的 aiportal-wsm-service 、global、dbconfig 等相关配置文件。

配置中心地址说明

  • name 配置文件名称,如果需要同时加载多个配置文件,需要用逗号隔开,如:aiportal-wsm-service(微服务启动配置文件)、global(全局参数配置)、dbconfig(数据库配置)
  • profile 部署环境,如dev、test、prod
  • uri 配置中心地址,如:http://localhost:8888

最后,如果从配置中心拉取配置文件成功,会输出如下日志:

代码语言:javascript
复制
b.c.PropertySourceBootstrapConfiguration : Located property source: CompositePropertySource [name='configService', propertySources=[MapPropertySource [name='http://10.236.0.96/unicom-portal/portal-repo.git/dbconfig/dbconfig-dev.yml'], MapPropertySource [name='http://10.236.0.96/unicom-portal/portal-repo.git/global/global-dev.yml'], MapPropertySource [name='http://10.236.0.96/unicom-portal/portal-repo.git/aiportal-wsm-service/aiportal-wsm-service-dev.yml']]]

这时配置入口类 PropertySourceBootstrapConfiguration 就是我们要找的解析配置文件入口类,所以研究 SpringBoot 程序如何加载配置文件,PropertySourceBootstrapConfiguration 是程序 debug 的关键。

PropertySourceBootstrapConfiguration

利用 IDEA 查看 PropertySourceBootstrapConfiguration 继承和实现的类图

首先, PropertySourceBootstrapConfiguration 通过注解 @Configuration 表明类本身是一个配置类,通过

@EnableConfigurationProperties(PropertySourceBootstrapProperties.class) 注解表明只有开启配置属性解析开关,PropertySourceBootstrapConfiguration 才会正常解析配置属性。

其次,PropertySourceBootstrapConfiguration 实现 ApplicationContextInitializer 接口类,其作用是在程序启动时,调用initialize方法进行相关初始化工作,也就是接下来要讲的 ConfigServer 的客户端解析配置文件的核心流程。

配置中心解析流程

通过 debug 调试 PropertySourceBootstrapConfiguration 的 initialize 方法,通过Debugger 的 Variables 属性窗口

发现 this.propertySourceLocators 这个成员集合属性,里面保存了配置属性解析器:ConfigServicePropertySourceLocator,而这个类是 Configserver 客户端配置属性解析器,其 Java 类目录在

org.springframework.cloud.config.client 文件夹下,而ConfigServicePropertySourceLocator 解析器存在目的是从配置中心拉取 SpringBoot程序的配置文件,用于程序初始化数据库连接池、业务参数配置等。

通过遍历 this.propertySourceLocators 集合(默认只有一个 ConfigServicePropertySourceLocator 解析器,出于业务目的,也可以自定义多个配置属性截器),属性解析器子项 ConfigServicePropertySourceLocator 会调用 locate 方法,此方法是从配置中心拉取配置文件真正执行者。

locate方法执行流程如下:

获取 bootstrap 的配置中心地址参数:ConfigClientProperties

初始化 http 请求模板 RestTemplate,其中 username 为默认用户:user,密码为空

关键配置文件拉取代码,调用 getRemoteEnvironment 方法返回一个 Environment对象:

代码语言:javascript
复制

Environment result = getRemoteEnvironment(restTemplate, properties, label.trim(), state);

通过 debug 调试信息,发现成功拉取到 dbconfig-dev.yml、global-dev.yml、aiportal-wsm-service.yml 等配置文件,其中每个配置文件的属性都存放在一个PropertySource 类的 source 成员属性中,

dbconfig-dev.yml配置属性值如下:

global-dev.yml配置属性值如下:

iportal-wsm-service.yml 配置属性值如下:

在线配置中心查看

如果想在线查看某个服务的配置属性,比如 aiportal-wsm-service 微服务配置属性,在浏览器输入http://localhost:8888/aiportal-wsm-service/dev

总结

使用 ConfigServer 作为服务的配置中心需要依赖第三方配置仓库,如 Gitlab、Svn等;并且 ConfigServer 没有可视化的控制台,能够针对不同的配置文件进行在线修改并能够及时刷新应用的配置。所以一旦涉及配置文件需要修改将是一件非常麻烦的事情。

而市面上如阿里的 Nacos 、携程的 Appllo 等配置中心很好的解决这个问题,像 Nacos 可以持久化配置,并且完整的保留历史的修订版本,能够实现上个版本的恢复操作,非常的友好。所以现在针对 SpringCloud 的生态中,有些组件是可以替换的,例如:

  1. Nacos(注册中心&配置中心) 对标 Eureka、ConfigServer
  2. Consul 对标 ConfigServer
本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2020-09-07,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 架构荟萃 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 环境准备
  • 配置解析入口
  • PropertySourceBootstrapConfiguration
  • 配置中心解析流程
  • 总结
相关产品与服务
对象存储
对象存储(Cloud Object Storage,COS)是由腾讯云推出的无目录层次结构、无数据格式限制,可容纳海量数据且支持 HTTP/HTTPS 协议访问的分布式存储服务。腾讯云 COS 的存储桶空间无容量上限,无需分区管理,适用于 CDN 数据分发、数据万象处理或大数据计算与分析的数据湖等多种场景。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档