SpringCloud不重启服务使配置文件生效

SpringCloud不重启服务使配置文件生效

不涉及配置中心的搭建和使用,网上百度一大堆,主要说一下不重启微服务使配置文件生效的流程

首先我们得添加一个依赖

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-actuator</artifactId>
</dependency>

它会提供一个/refresh这样的监控端点,当配置文件修改了的时候,我们可以去调用这个监控端点,让服务重新拉取配置文件,并刷新配置文件

接下来主要说一下这个监控端点做了什么 ContextRefresher类的refresh()方法中

public synchronized Set<String> refresh() {
	Map<String, Object> before = extract(
			this.context.getEnvironment().getPropertySources());
	addConfigFilesToEnvironment();
	Set<String> keys = changes(before,
			extract(this.context.getEnvironment().getPropertySources())).keySet();
	this.context.publishEvent(new EnvironmentChangeEvent(context, keys));
	this.scope.refreshAll();
	return keys;
}

SpringBoot的配置都是保存Environment中,该方法先获取到旧的配置值,在addConfigFilesToEnvironment()方法中会去重新拉取新的配置,并将新的配置赋值到Environment中,然后会比较新旧配置的不同,然后再返回,所以我们调用/refresh时是会返回修改了的配置

然后在说一下EnvironmentChangeEvent事件的监听器

DelegatingApplicationListener
ConfigurationPropertiesRebinder
LoggingRebinder

ConfigurationPropertiesRebinder会去刷新所有的配置类,就是带有ConfigurationProperties注解的类

this.scope.refreshAll();就会去刷新所有被@RefreshScope注解配置的bean

ConfigurationPropertiesRebinder
Endpoint
EndpointHandlerMapping
MvcEndpoints

转载于:https://my.oschina.net/chenbkit/blog/2958487

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值