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

2019独角兽企业重金招聘Python工程师标准>>> hot3.png

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

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

首先我们得添加一个依赖


    org.springframework.boot
    spring-boot-starter-actuator

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

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

public synchronized Set refresh() {
	Map before = extract(
			this.context.getEnvironment().getPropertySources());
	addConfigFilesToEnvironment();
	Set 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

你可能感兴趣的:(SpringCloud不重启服务使配置文件生效)