2024-5-9-从0到1手写配置中心Config之@ConfigurationProperties热更新

  1. 在PropertySourcesProcessor中,需要通过http从config-server获取配置。
  1. 使用ConfigMeta包装服务信息
  1. 在MidnightConfigService接口中添加默认实现类
  • 继承MidnightRepositoryChangeListener接口;
  • 获取默认的MidnightRepository;
  • 创建MidnightConfigServiceImpl实现类;
  • 添加listener
  1. 定义MidnightRepositoryChangeListener,用于事件监听的回调接口
  • onChange() 执行方法
  • ChangeEvent变动事件,传递参数
  1. 定义MidnightRepository接口
  • 提供默认实现类
  • getConfig()获取配置
  • addListener()添加监听器
  1. MidnightRepositoryImpl实现从server获取配置
  • meta保存服务配置源信息;
  • versionMap保存server版本号,用于比较本地和远程版本信息,用于比对配置是否发生变化;
  • configMap保存一个ns服务下所有配置信息;
  • executor定时任务,监听服务端配置是否发生变化;
  • listeners保存监听器。
  1. findAll()接口

发起http请求,从config-server获取所有配置信息。

  1. heartbeat() 心跳检测
  • 发起http请求,从配置中心服务端获取最新版本信息;
  • 当远程版本信息大于本地版本信息时,说明配置发生了变化。
  • 保存最新版本信息;
  • 从配置中心重新获取所有配置信息;
  • 保存最新的配置信息;
  • 发布配置发生变更事件
  1. onChange() 发布事件
  • 更新本地最新配置
  • 通过Spring发布环境变更事件。事件类EnvironmentChangeEvent来自于SpringCloud,解决微服务架构下配置热更新问题。
  1. 重新绑定配置

当EnvironmentChangeEvent事件发布之后,会重新绑定PropertySource,调用getProperty()方法获取最新配置。

  • @ConfigurationProperties 中的属性就会被更新
  1. 测试
  • 启动config-server
  • 启动config-client
  • 观察日志,最开始的值如下
  • 更新这两个值后,再观察日志。

发现版本发生了变化,重新获取了配置,并发布了EnvironmentChangeEvent事件。

  • 两个值已经被更新了

源代码:

https://github.com/midnight2104/midnight-config/tree/v3

相关推荐
打码人的日常分享4 分钟前
企业人力资源管理,人事档案管理,绩效考核,五险一金,招聘培训,薪酬管理一体化管理系统(源码)
java·数据库·python·需求分析·规格说明书
27669582924 分钟前
京东e卡滑块 分析
java·javascript·python·node.js·go·滑块·京东
爱写代码的刚子6 分钟前
C++知识总结
java·开发语言·c++
冷琴199614 分钟前
基于java+springboot的酒店预定网站、酒店客房管理系统
java·开发语言·spring boot
daiyang123...40 分钟前
IT 行业的就业情况
java
爬山算法1 小时前
Maven(6)如何使用Maven进行项目构建?
java·maven
.生产的驴1 小时前
Electron Vue框架环境搭建 Vue3环境搭建
java·前端·vue.js·spring boot·后端·electron·ecmascript
爱学的小涛1 小时前
【NIO基础】基于 NIO 中的组件实现对文件的操作(文件编程),FileChannel 详解
java·开发语言·笔记·后端·nio
吹老师个人app编程教学1 小时前
详解Java中的BIO、NIO、AIO
java·开发语言·nio
爱学的小涛1 小时前
【NIO基础】NIO(非阻塞 I/O)和 IO(传统 I/O)的区别,以及 NIO 的三大组件详解
java·开发语言·笔记·后端·nio