spring cloud config 源码阅读分析笔记
2021-02-03 15:26:35 0 举报
spring cloud config 源码阅读分析笔记,目前只有 client 包的笔记,后续在加
作者其他创作
大纲/内容
作用: 当远程配置发生改变后,由应用自动刷新默认情况是,当springboot应用启动 3分钟后,每5秒钟做一次状态检查。 - 1.获取应用环境上下文中 config.client.state 的 值 和 线程中保存的 state 值 - 2.比较两个值 - 3.如果发生了改变,那就使用 ContextRefresher,执行刷新 - 4.如果未改变,不操作这个 config.client.state 的值在从配置中心服务端获取配置时会写入,但是这个值总是为 null ,因此推测,在此版本这个功能未实现
读spring源码前,首先简单了解一下源码包中定义的配置项,通过配置项可以先大概的了解一些相关内容,可以知道使用的配置文件位置和一些说明health.config 健康检查相关配置spring.cloud.config 配置中心相关配置spring.cloud.config.discovery 配置中心服务发现相关配置spring.cloud.config.retry 重试机制配置
ConfigServicePropertySourceLocator
ConfigServerHealthIndicator
RetryConfiguration
ConfigClientAutoConfiguration
ConfigServerInstanceProvider
默认不开启服务发现的启动配置类1.创建 ConfigClientProperties 的bean实例,注入 ConfigurableEnvironment 实例 - ConfigClientProperties 中定义了配置中心客户端的配置属性2.创建 ConfigServicePropertySourceLocator 的 bean实例,注入第1步的 ConfigClientProperties 实例 @ConditionalOnMissingBean(ConfigServicePropertySourceLocator.class) @ConditionalOnProperty(value = \"spring.cloud.config.enabled\
spring-configuration-metadata.json
RetryProperties
相关类
类似于SPI方式配置一些启动时需要加载的配置类BootstrapConfiguration - ConfigServiceBootstrapConfiguration - DiscoveryClientConfigServiceBootstrapConfigurationEnableAutoConfiguration - ConfigClientAutoConfiguration
ConfigClientWatch
ConfigClientProperties
spring.factories
ConfigClientHealthProperties
Container
SmartApplicationListener heartbeatListener
DiscoveryClientConfigServiceBootstrapConfiguration
spring cloud config client 的自动配置类1.创建 ConfigClientProperties 的bean实例,注入 ConfigurableEnvironment 实例 - ConfigClientProperties 中定义了配置中心客户端的配置属性2.创建 ConfigClientHealthProperties 配置中心健康检查配置类 - timeToLive : 健康检查相关缓存数据的查询间隔(如果当前时间戳和上一次操作时间超出了timeToLive,就重新获取最新的内容,再更新操作时间)3.ConfigServerHealthIndicator 配置中心健康检查类 4.ConfigClientWatch - 当状态值发生改变后,可以自动刷新应用上下文的观察者类
服务发现情况的增强启动配置类1.创建 ConfigServerInstanceProvider 的 bean 实例 此类相当于对 DiscoveryClient 的一个简单包装, - 根据配置中心的服务名,从服务发现服务(eureka等)上,获取注册的配置中心服务信息。(服务信息中包含 ip 等信息,用于拼接url等) 2.创建 SmartApplicationListener heartbeatListener 的 bean 实例 - 1.此类会监听 ContextRefreshedEvent ,HeartbeatEvent 事件 - 2.当上下文被刷新或者,触发心跳事件后,执行刷新操作 - 3.刷新操作主要通过 DiscoveryClient 来同步最新的配置中心的信息到本地 this.config.setUri(uri);
实现了 PropertySourceLocator ,可以重写其中的 locate 方法, 实现在应用初始化时,动态加入配置。此类的主要作用: 1.根据用户配置产生 RestTemplate 实例,用于后续请求配置中心服务端 - 默认不使用TLS,开启方式为 spring.cloud.config.tls.enabled = true 和 keystore 2.根据用户配置产生 URI - 具体格式参照官方文档 3.向 config server 发起 http 请求,用于获取配置 - 交互对象: org.springframework.cloud.config.environment.Environment - api: EnvironmentController (server包) 4.获取成功后组合加载到应用环境 - composite.addFirstPropertySource 备注: - Environment.SLASH_PLACEHOLDER = \"(_)\"; // 通过特殊字符占位来替换 git repository名称,git repository 名称 由用户提供的配置组合而成
继承 Environment,提供一些可以操作 PropertySources 等内容的api可以通过 注入ContextRefresher,配合 ConfigurableEnvironment 达到动态刷新配置的操作configurableEnvironment.getPropertySources().addFirst( new MapPropertySource(\"key\
ConfigServiceBootstrapConfiguration
ConfigurableEnvironment
继承 AbstractHealthIndicator ,需要重写 doHealthCheck 方法1.当请求 /actuator/health 接口后,会调用此方法,以获取此功能健康检查的相关信息此类的主要作用是提供配置中心客户端健康信息。 详情可以了解 健康检查相关内容
spring cloud config client 的配置类1.首先会在 ConfigServiceBootstrapConfiguration 创建并把此bean 放入容器管理2.在 ConfigClientAutoConfiguration 中会检查,如果此bean存在,就使用 BeanFactoryUtils 帮助类获取存在的配置,如果不存在就重新创建并放入容器管理
开始spring-cloud-config-client-2.2.5.RELEASE.jar
0 条评论
回复 删除
下一页