文章插图
最终从配置中心获取到的属性会放在项目启动时创建的 Environment 对象里面 。
3.2配置刷新源码流程
文章插图
这个图新增了对于加了@ConfigurationProperties数据绑定的对象原理的分析 。
整合SpringCloud和测试一、整合SpringCloud1、ConfigCenterProperties
文章插图
配置中心的配置信息 , 这里需要配置配置中心服务端的地址和使用的配置文件的id 。当然这部分信息需要写在bootstrap配置文件中 , 前面也说过具体的原因 。
2、ConfigCenterPropertySourceLocator上面分析知道 , 项目启动和刷新的时候,SpringCloud是通过PropertySourceLocator的实现从配置中心加载配置信息,所以这里就得实现一下
文章插图
核心的逻辑就是根据所配置的文件的id,从配置中心拉取配置信息 , 然后解析配置 。
3、ConfigContextRefresher这个是用来注册文件变动的监听器,来刷新文件的信息的 。
因为上面提到,当配置发生变化的时候,需要发布一个RefreshEvent事件来触发刷新配置的功能 。
文章插图
核心的逻辑就是当项目启动的时候 , 对所使用的配置文件进行注册一个监听器 , 监听器的实现就是当发生配置改动的时候,就发布一个RefreshEvent事件 。
4、两个配置类4.1 ConfigCenterBootstrapConfiguration
文章插图
配置了ConfigCenterPropertySourceLocator、ConfigCenterProperties、ConfigService
4.2 ConfigCenterAutoConfiguration
文章插图
配置了ConfigContextRefresher、ConfigCenterProperties、ConfigService
最后需要将两个配置类在spring.factories配置一下 。
这里有个需要注意,前面说过,SpringCloud会创建新的容器来加载配置 , 而这个容器只会加载spring.factories文件中键为@BootstrapConfiguration注解的配置类,所以需要将ConfigCenterBootstrapConfiguration跟BootstrapConfiguration配对,因为ConfigCenterBootstrapConfiguration配置了ConfigCenterPropertySourceLocator 。
文章插图
好了,到这里真的就完成了对SpringCloud整合了 。
二、测试1、新增一个配置文件启动配置中心的server端,然后打开ApiPost,新增一个配置文件
文章插图
新增文件类型为properties一个配置,内容为sanyou.username=sanyou键值对,当然可以写很多键值对,我这里就写了一个 , 新增成功之后,返回了文件的id:79765c73-c1ef-4ea2-ba77-5d27a64c4685
2、测试客户端这里我为了方便,就把测试代码跟客户端写在同一个服务了,正常情况肯定是把跟SpringCloud代码打成一个依赖引到项目中 。
在bootstrap.yml文件中配置配置中心的相关信息
文章插图
- 配置中心服务端的地址是:localhost:8888
- 使用的配置文件的id是刚才创建的:79765c73-c1ef-4ea2-ba77-5d27a64c4685
文章插图
提供一个接口,注入上面提到的UserService
启动项目 , 调用接口
文章插图
从断这里可以看出,实际注入的是一个UserService代理对象,并且最终找的是com.sanyou.configcenter.test.UserService@3a1e4fd3这个UserService对象
此时这次调用的返回值就是:sanyou
文章插图
接下来测试一下自动刷新属性的功能
现在修改一下配置中心的sanyou.username为sanyou666
文章插图
静静等待5秒钟 。。
此时控制台打印出 Refresh keys changed: [sanyou.username],也就是sanyou.username属性变了
文章插图
推荐阅读
- 素士w3冲牙器坏了怎么拆开修理_素士w3冲牙器的拆解
- 小米11系列出现重大翻车_小米11系列是不是真的翻车了
- 【C++】从零开始的CS:GO逆向分析3——写出一个透视
- 去土耳其别再买洛神诗rosense玫瑰水了 很多国人都只知道土耳其粉色瓶的rosense玫瑰水好用
- 为了幻化求出处最好附带图片证实下 土著缠腰哪里出
- 社保每个月都在交,社保卡该如何使用(老家有一张社保卡外省交了社保)
- airpods丢了怎么定位查找_airpods丢了怎么查找位置
- python基础--简单数据类型预览
- 苹果ios15是不是更费电了_苹果ios15耗电快吗
- StampedLock:一个并发编程中非常重要的票据锁