文档章节

分布式配置中心disconf第三部(基于xml配置的实现原理)

白中墨
 白中墨
发布于 05/16 13:12
字数 495
阅读 8
收藏 0

基于配置与基于注入实现方式,区别还是比较大的,为了便于理解,我们先了解一下大家常见的场景,通过spring配置properties文件,达到使用@Value注解获取参数配置的原理:

  • 传统的spring参数注解实现原理
    首先需要定一个叫做PropertyPlaceholderConfigurer的bean,定义如下
    <bean id="appProperty"
        class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">
        <property name="locations">
            <array>
                <value>classpath:app.properties</value>
            </array>
        </property>
    </bean>

    结合类图的集成结构看下:

    1、PlaceholderConfigurerSupport---提供基础的操作,如properties的load、merge,实现流转换成为property对象
    2、PropertyResourceConfigurer--因为这个类集成了BeanFactoryPostProcessor,所以容器加载阶段,执行postProcessBeanFactory方法,调用子类也就是PlaceholderConfigureSupport的doProcessProperties方法,完成properties装载,bean中的$value替换
    3、PlaceholderConfigureSupport---执行具体的替换动作,兼容spring版本差异带来的配置替换不同
    4、PropertyPlaceholderConfigurer---通过processProperties方法提供替换的具体实现

  • disconf配置实现原理:
    ReloadablePropertiesFactoryBean,做了哪些事情
    1、文件远程下载,存储至内存
    2、把下载至本地的文件,提供给父类,保证PlaceholderConfigurerSupport能够load到数据
    ReloadingPropertyPlaceholderConfigurer,做了哪些事情
    1、当远程数据变化,需要调用该接口的propertiesReloaded方法,做bean的重新赋值,这里使用的是注册监听事件的方式
    2、系统正常启动时,提供了一个bean属性替换的功能也就是processProperties,这里重写了PropertyPlaceholderConfigurer的processProperties实现,为什么要重写,因为我们实现了disconf所特有的解析和替换逻辑!

© 著作权归作者所有

白中墨
粉丝 1
博文 26
码字总数 39237
作品 0
昌平
私信 提问
分布式配置管理平台--Disconf

Distributed Configuration Management Platform(分布式配置管理平台) 专注于各种 分布式系统配置管理 的通用组件/通用平台, 提供统一的配置管理服务。 包括 百度、滴滴打车、银联、网易、拉...

knightliao
2015/04/13
67.8K
19
分布式配置管理平台Disconf

摘要 为了更好的解决分布式环境下多台服务实例的配置统一管理问题,本文提出了一套完整的分布式配置管理解决方案(简称为disconf[4],下同)。首先,实现了同构系统的配置发布统一化,提供了...

很好亦平凡ms
2016/07/13
52
0
Spring Cloud 如何选择分布式配置中心

微服务必备的几样武器有了,才能独闯武林, 有哪几样呢? 注册中心(eureka, consul, zk, etcd) 配置中心 (Spring Cloud Config, disconf ) API网关 (Spring Cloud zuul, kong) 熔断器 (hys...

尹吉欢
2017/11/30
0
0
百度、阿里、腾讯、京东、大型互联网分布式架构必备技能

分布式架构 迎接高并发大数据的挑战,从深度到广度完善知识体系,成为下一个互联网高薪人才。 理论结合实战,透彻理解分布式架构及其解决方案。 面向人群 1、工作1-5年需要突破瓶颈; 2、传统...

Java高级架构
2017/12/21
0
0
开源的自动化部署工具探索

1 前言 即使是在传统的企业当中,日常的备份、服务器状态监控和日志,通过手动的方式来进行的效率也很低,是一种人力的浪费。因此,自动化早已是每个运维都必须掌握的看家本领。 在不同的企业...

双月通天
2016/03/18
2.2K
0

没有更多内容

加载失败,请刷新页面

加载更多

idea下springboot 项目在static目录下添加文件不生效

idea下springboot 项目在static目录下添加文件不生效 问题描述 是这样子的,我的项目目录结构如下: 我在static目录下,创建了index.html和aaaa.jpg这两个文件。然后,启动服务访问 http://l...

wotrd
昨天
5
0
k8s1.14 一、环境

1. 4台虚拟机 (CentOS Linux release 7.2.1511 (Core) ) 192.168.130.211 master 192.168.130.212 node1 192.168.130.213 node2 192.168.130.214 node3 2. 设置服务器hostname 2.1 设置本机......

ThomasCheng
昨天
4
0
盖茨:如果我现在开创一家公司 将会专注于AI

新浪科技讯,北京时间 6 月 26 日凌晨消息,微软联合创始人比尔·盖茨(Bill Gates)在周一接受采访时表示,如果他今天从哈佛大学辍学并开创一家新公司,那么这家公司将会专注于人工智能(A...

linuxCool
昨天
1
0
聊聊feign的Retryer

序 本文主要研究一下feign的Retryer Retryer feign-core-10.2.3-sources.jar!/feign/Retryer.java public interface Retryer extends Cloneable { /** * if retry is permitted, retur......

go4it
昨天
12
0
HyperLogLog简介

  (1)HyperLogLog简介      在Redis 在 2.8.9 版本才添加了 HyperLogLog,HyperLogLog算法是用于基数统计的算法,每个 HyperLogLog 键只需要花费 12 KB 内存,就可以计算接近 2^64 个...

SEOwhywhy
昨天
1
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部