Spring Cloud Config

简介: Spring Cloud Config

一、Config Server和Client原理

备注:Spring Cloud Config和Spring Cloud Eurake相似,都有客户端和服务端。


1、ConfigServer(配置中心服务端)从远端git拉取配置文件并在本地git一份,ConfigClient(微服务)从ConfigServer端获取自己对应 配置文件;


2,、手动刷新?

通过actuator和@RefreshScope通过调用actuator/refresh


3、当远端git仓库配置文件发生改变,ConfigServer如何通知到ConfigClient端,即ConfigClient如何感知到配置发生更新?


Spring Cloud Bus会向外提供一个http接口,即图中的/bus/refresh。我们将这个接口配置到远程的git的webhook上,当git上的文件内容发生变动时,就会自动调用/bus-refresh接口。Bus就会通知config-server,config-server会发布更新消息到消息总线的消息队列中,其他服务订阅到该消息就会信息刷新,从而实现整个微服务进行自动刷新。


微信图片_20220128165527.png


1、提交配置触发post请求给server端的bus/refresh接口

2、server端接收到请求并发送给Spring Cloud Bus总线

3、Spring Cloud bus接到消息并通知给其它连接到总线的客户端

4、其它客户端接收到通知,请求Server端获取最新配置

5、全部客户端均获取到最新的配置


二、Spring Boot配置文件加载过程


我们可以从SpringApplication.run()方法作为入口,prepareEnvironment是一个比较关键的方法;可以看出在Run方法中是,先加载PrepareEnvironment准备环境,然后在去准备Context上下文


image.png


1,PrepareEnvironment中getOrCreateEnvironment是根据WebApplication的类型选择不同的Environment,


image.png


接着再点进去**getOrCreateEnvironment()**中去,根据不同的特点,选择不同的环境


image.png


我们根据不同的环境选择不同的Environment;StandardServletEnvironment是整个spring boot应用运行环境的实现类,后面所有的关于环境相关的配置操作都是基于这个类。StandardEnvironment是StandardServletEnvironment的父类,AbstarctEnvironment是StandardEnvironment的父类,StandardServletEnvironment 中customizePropertySources的作用及时将不同配置源封装成PropertySource添加到MutablePropertySources中,调用AddLast标志一直往最后的位置添加。StandardServletEnvironment.customizePropertySources()中添加了servlet配置信息和servlet初始上下文信息,JNDI信息;接着调用其父类StandardEnvironment.customizePropertySources来添加系统的变量和系统的环境变量。


接着是configureEnvironment方法,这个方法中给Environment中添加类型转化的服务,property都是String类型的,转换为java对象需要根据合适的类型进行转化;配置当前激活的Profiles;configurePropertySources根据是否加载参数添加不同的propertySource。

listeners.environmentPrepared(environment);

上述工作完成之后,就是发布一个environmentPrepared环境准备就绪的通知,具体的时间监听过程的代码就不再分析了,我们直接进入到 ConfigFileApplicationListener 这个监听器,这个监听器就是用来处理项目配置的


配置加载过程:

ConfigFileApplicationListener.onApplicationEvent 收到事件之后,最终执行到ConfigFileApplicationListener.addPropertySources 方法中;这个方法做了两件事情,添加一个RandomValuePropertySource到Environment的MutablePropertySources中

加载spring boot中的配置信息,比如application.yml或者application.properties


至此,springBoot中的资源文件加载完毕,解析顺序从上到下,所以前面的配置文件会覆盖后面的配置

文件。可以看到 application.properties 的优先级最低,系统变量和环境变量的优先级相对较高。


三、Config Client 配置加载过程

从上边Spring boot的加载过程,可以推测;Config Client配置加载也一定与spring的某个机制有关系。

在spring boot项目启动时,有一个prepareContext的方法,它会回调所有实现了ApplicationContextInitializer 的实例,来做一些初始化工作。

PropertySourceBootstrapConfiguration 实现了 ApplicationContextInitializer 接口,其目的就是在应用程序上下文初始化的时候做一些额外的操作.

回调所有实现PropertySourceLocator接口实例的locate方法;最终调用ConfigServicePropertySourceLocator.locate();它会通过RestTemplate调用一个远程地址获得配置信息,

getRemoteEnvironment 。然后把这个配置PropertySources,然后将这个信息包装成一个

OriginTrackedMapPropertySource,设置到 Composite 中。


四、Config Server获取配置过程

服务器端去远程仓库加载配置的流程就比较简单了,核心接口是: EnvironmentRepository


Spring Cloud Config Server提供了EnvironmentController,这样通过在浏览器访问即可从git中获取配

置信息

在这个controller中,提供了很多的映射,最终会调用的是 getEnvironment 。


image.png


this.repository.findOne ,调用某个repository存储组件来获得环境配置信息进行返回。

repository是一个 EnvironmentRepository 对象,它有很多实现,其中就包含

RedisEnvironmentRepository 、 JdbcEnvironmentRepository 等。默认实现是

MultipleJGitEnvironmentRepository ,表示多个不同地址的git数据源。


image.png


image.png

目录
相关文章
|
25天前
|
消息中间件 监控 Java
如何将Spring Boot + RabbitMQ应用程序部署到Pivotal Cloud Foundry (PCF)
如何将Spring Boot + RabbitMQ应用程序部署到Pivotal Cloud Foundry (PCF)
31 6
|
25天前
|
Java 关系型数据库 MySQL
如何将Spring Boot + MySQL应用程序部署到Pivotal Cloud Foundry (PCF)
如何将Spring Boot + MySQL应用程序部署到Pivotal Cloud Foundry (PCF)
45 5
|
25天前
|
缓存 监控 Java
如何将Spring Boot应用程序部署到Pivotal Cloud Foundry (PCF)
如何将Spring Boot应用程序部署到Pivotal Cloud Foundry (PCF)
35 5
|
3月前
|
Java 开发工具 对象存储
简化配置管理:Spring Cloud Config与Netflix OSS中的动态配置解决方案
简化配置管理:Spring Cloud Config与Netflix OSS中的动态配置解决方案
59 2
|
4月前
|
Cloud Native Java Nacos
Spring Cloud Config、Apollo、Nacos和Archaius对比
这篇文章对比了Spring Cloud Config、Apollo、Nacos和Archaius这四种配置中心的适应场景、优缺点。文中讨论了它们的功能特点,例如Spring Cloud Config的集中化配置管理和动态刷新能力,Apollo的实时配置推送和权限治理,Nacos的服务发现和管理功能,以及Archaius的动态配置更新能力。文章指出选择配置中心应根据项目需求和架构来决定,并提供了一个对比图来帮助读者更直观地理解这些工具的差异。
147 1
Spring Cloud Config、Apollo、Nacos和Archaius对比
|
5月前
|
负载均衡 Java Spring
Spring cloud gateway 如何在路由时进行负载均衡
Spring cloud gateway 如何在路由时进行负载均衡
598 15
|
5月前
|
Java Spring
spring cloud gateway在使用 zookeeper 注册中心时,配置https 进行服务转发
spring cloud gateway在使用 zookeeper 注册中心时,配置https 进行服务转发
128 3
|
5月前
|
消息中间件 Java Nacos
通用快照方案问题之通过Spring Cloud实现配置的自动更新如何解决
通用快照方案问题之通过Spring Cloud实现配置的自动更新如何解决
81 0
|
5月前
|
缓存 监控 Java
通用快照方案问题之Spring Boot Admin的定义如何解决
通用快照方案问题之Spring Boot Admin的定义如何解决
72 0
|
5月前
|
监控 NoSQL Java
通用快照方案问题之Martin Flower提出的微服务之间的通信如何解决
通用快照方案问题之Martin Flower提出的微服务之间的通信如何解决
45 0

热门文章

最新文章