2024-5-6-从0到1手写配置中心Config之实现配置中心客户端

news2024/11/16 18:02:30
  1. 配置加载原理

在Spring中PropertySource类实现了所有属性的实例化。

启动赋值:

  • 定义自定义属性配置源,从config-server获取全局属性;
  • Spring启动时,插入自定义属性配置源;
  • 绑定属性会优先使用,给自定义属性配置源赋值。

动态更新:

  • client端和server端保持心跳检测,当有配置变动时获取新配置;
  • 对于@Value的字段需要反射赋值;
  • 对于@ConfigurationProperties配置类可以发送刷新事件。

优先级:

  • 自定义配资源;
  • 来自系统属性;
  • 来自application.yaml;
  • 来自application.properties;
  • 来自spring内置属性。
  1. 自定义客户端注解

使用该注解就能加载客户端程序

图片

  1. 自定义ConfigService

接口: 获取所有配置名称;根据名称获取配置

图片

实现类:使用Map保存所有配置信息

图片

  1. 自定义配置源

继承了EnumerablePropertySource,从ConfigService中获取属性信息。

图片

  1. 自定义配置源处理器
  • 实现BeanFactoryPostProcessor接口重新bean的后置处理逻辑;
  • 实现 EnvironmentAware接口获取环境变量;
  • 实现 PriorityOrdered接口定义优先级。

图片

在postProcessBeanFactory()方法中

  • 通过http请求到 config-server 获取配置;
  • 创建自定义配置源;
  • 创建组合配置源,可以加载多个自定义的配置源;
  • 放到属性源环境变量的最前面。

程序启动时,debug可以看到,配置中心的值加载到env的最前面了。

图片

  1. 手动注册bean

配置中心的客户端只是一个jar包,不是web项目,不能自动扫描注解包,需要手动注册bean。

通过实现ImportBeanDefinitionRegistrarle完成手动注册。一开始先判断是否存在,避免重复加载,然后再注册。

图片

  1. 测试

新建一个web工程,在启动类中使用注解@EnableMidnightConfig启动配置中心客户端。

在demo工程中,使用了@Value的方式和@ConfigurationProperties配置的方式。

图片

图片

工程中默认的配置值midnight.a=a100。

图片

配置中心默认的是midnight.a=dev500。

图片

启动工程,查看日志,两种配置方式都是dev500,说明配置中心起作用了。

图片

源代码: https://github.com/midnight2104/midnight-config

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1688288.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

下拉框操作/键鼠操作/文件上传

在我们做UI自动化测试的时候,会有一些元素需要特殊操作,比如下拉框操作/键鼠操作/文件上传。 下拉框操作 在我们很多页面里有下拉框的选择,这种元素怎么定位呢?下拉框分为两种类型:我们分别针对这两种元素进行定位和…

移动硬盘容量消失无法读取的解决方案

在数字化时代,数据的存储和备份变得尤为重要。移动硬盘作为一种便捷、大容量的存储设备,受到许多人的青睐。然而,有时我们可能会遭遇这样的问题:移动硬盘不显示容量且无法访问。这种情况无疑给我们的数据存储和管理带来了巨大的困…

sequence cache太小导致enq: SQ – contention

当业务卡的时候,发现大量等待事件为enq: SQ – contention,检查awr的top 5事件: sql语句对sequence的调用非常频繁: 对这些语句排查发现sequence cache值均为默认20,调大cache到1000值: SQL> select SE…

基于YOLOV8/YOLOV5的PCB板缺陷检测识别系统

摘要: 本文详细阐述了一个利用深度学习进行PCB板缺陷检测的系统,该系统集成了最新的YOLOv8算法,并与YOLOv7、YOLOv6、YOLOv5等先前版本进行了性能比较。该系统能够在图像、视频、实时视频流和批量文件中精确地识别和分类PCB板缺陷。文中不仅深…

WiFi蓝牙模块厂家带你了解蓝牙模块功率的等级

目前蓝牙技术的突破已经让许多蓝牙模块厂家从业者忘记了很多专业术语,比如Class1,Class2等,那么我们就蓝牙模块发射功率来做个详细了解。   针对功率来说,低功耗蓝牙和经典蓝牙又有区别。   低功耗蓝牙没有功率的级别&#xf…

Milvus:揭秘未来数据探索之钥

Milvus是什么? 想象一下,你正坐在一个巨大的图书馆中,成千上万本书摆放在眼前,但图书馆却没有目录和顺序,这听起来像一项艰巨的任务,不是吗?好消息是,在数字世界中,我们…

经纬恒润第三代重载自动驾驶平板车

随着无人驾驶在封闭场地和干线道路场景的加速落地,港口作为无人化运营的先行者,其场景的复杂度、特殊性对无人化运营的技术提出了各种挑战。经纬恒润作为无人驾驶解决方案提供商,见证了港口在无人化运营方面的尝试及发展,并深度参…

Python——基于共享单车使用量数据的可视化分析(1)

目录 🧾 1、数据集(部分数据) ✏️ 2、导入数据集与必要模块 1️⃣ 2.1 导入库以及字体包 2️⃣ 2.2 读取数据集 3️⃣ 2.3 查看数据集基本信息 ⌨️ 3、数据预处理 1️⃣ 3.1删除无关字段 2️⃣ 3.2对各字段进行中文标识 3️⃣ 3.3…

Timeline

SignalTrack信号轨道和自定义带参数的Marker信号和轨道 MySignalReceiver using System; using System.ComponentModel; using UnityEngine.Playables; using UnityEngine.Events;namespace UnityEngine.Timeline { public class BaseSignalReceiver<T, Q> : MonoBeha…

3100点失守,小丑竟是我自己

敏感时刻&#xff0c;亮剑的我们股市买单&#xff0c;海的那边反倒还涨了&#xff0c;好生气啊&#xff01;就连我们胡主编昨晚都气得睡不着&#xff0c;一点多了还在那抒发情感&#xff0c; 确实&#xff0c;有句话说到心窝里了&#xff1a;小散们是拿真金白银撑场子的&#x…

微星打造全球首款DDR5 CAMM2内存主板:这下清爽了

微星预告了新款主板“ Z790 Project Zero Plus”&#xff0c;这也是 全球第一款配备DDR5 CAMM2内存的桌面主板&#xff01; CAMM全称为“Compression Attached Memory Module”&#xff0c;已被JEDEC组织接纳为行业标准&#xff0c;相比传统的SO-DIMM、DIMM内存最大特点就是取消…

大模型之Ollama:在本地机器上释放大型语言模型的强大功能

LlaMA 3 系列博客 基于 LlaMA 3 LangGraph 在windows本地部署大模型 &#xff08;一&#xff09; 基于 LlaMA 3 LangGraph 在windows本地部署大模型 &#xff08;二&#xff09; 基于 LlaMA 3 LangGraph 在windows本地部署大模型 &#xff08;三&#xff09; 基于 LlaMA…

spark的简单学习一

一 RDD 1.1 RDD的概述 1.RDD&#xff08;Resilient Distributed Dataset&#xff0c;弹性分布式数据集&#xff09;是Apache Spark中的一个核心概念。它是Spark中用于表示不可变、可分区、里面的元素可并行计算的集合。RDD提供了一种高度受限的共享内存模型&#xff0c;即RD…

翻译《The Old New Thing》- Why do we even have the DefWindowProc function?

Why do we even have the DefWindowProc function? - The Old New Thing (microsoft.com)https://devblogs.microsoft.com/oldnewthing/20071105-00/?p24583 Raymond Chen 2007年11月05日 为什么一定要使用 DefWindowProc 函数&#xff1f; 简要 文章讨论了为什么我们有DefW…

day15|各种遍历的应用

相关题目&#xff1a; 层次遍历会一打十 反转二叉树 对称二叉树 层次遍历会一打十 自底向上的层序遍历 实现思路&#xff1a;层次遍历二叉树&#xff0c;将遍历后的结果revers即可 public List<List<Integer>> levelOrderBottom(TreeNode root) {List<List&l…

Flutter 页面布局 Flex Expanded弹性布局

题记 —— 执剑天涯&#xff0c;从你的点滴积累开始&#xff0c;所及之处&#xff0c;必精益求精&#xff0c;即是折腾每一天。 什么是弹性布局&#xff08;Flex&#xff09;&#xff1f; 弹性布局&#xff08;Flex&#xff09;是一种基于弹性盒子模型的布局方式&#xff0c;类…

IP地址显示“不安全”怎么办|已解决

解决IP地址显示“不安全”的问题&#xff0c;通常需要确保网站或服务使用HTTPS协议进行加密通信&#xff0c;可以通过部署SSL证书来解决&#xff0c;以下是具体的解决步骤&#xff1a; 1 申请IP地址SSL证书&#xff1a;网站管理员应向证书颁发机构&#xff08;CA&#xff09;申…

【教学类-58-03】黑白三角拼图03(4*4宫格)总数算不出+随机抽取10张

背景需求&#xff1a; 【教学类-58-01】黑白三角拼图01&#xff08;2*2宫格&#xff09;256种-CSDN博客文章浏览阅读318次&#xff0c;点赞10次&#xff0c;收藏12次。【教学类-58-01】黑白三角拼图01&#xff08;2*2宫格&#xff09;256种https://blog.csdn.net/reasonsummer/…

联邦BGP

AR1&#xff1a; [Huawei]bgp 1 [Huawei-bgp]router-id 1.1.1.1 [Huawei-bgp]peer 12.1.1.2 as-number 2 [Huawei-bgp]network 10.1.1.1 24---宣告 AR8&#xff1a; [Huawei]bgp 3 [Huawei-bgp]router-id 8.8.8.8 [Huawei-bgp]peer 78.1.1.7 as-number 2 [Huawei-bgp]ne…

剖析镜面不锈钢氮气柜的种类和使用维护方法

镜面不锈钢氮气柜是一种高端的储存设备&#xff0c;专门设计用于保存对环境条件有严格要求的敏感物品。它采用了高品质的不锈钢材料&#xff0c;并通过精细的抛光处理达到镜面效果&#xff0c;不仅美观而且具备优秀的耐腐蚀性和易清洁性。柜体内利用氮气控制系统&#xff0c;通…