前言
最近接触到了apollo的使用,由于原来一直用nacos,知道nacos在不重启服务的情况下可以监听到配置更新,利用@RefreshScope注解来实现,但是apollo并不支持。
一、说明
一般我们在使用动态配置的时候有两种方式
1、@Value apollo自动监听
2、以配置文件的形式使用 @ConfigurationProperties ,也就是这种形式在apollo中@RefreshScope注解不在能够监听到配置变化,需要我们自己实现一个监听器来实现。
二、监听器的实现
@Component
@Slf4j
public class ApolloPropertiesChangedListener implements ApplicationContextAware {
private ApplicationContext applicationContext;
@ApolloConfigChangeListener
private void someChangeHandler(ConfigChangeEvent changeEvent) {
for (String key : changeEvent.changedKeys()) {
ConfigChange change = changeEvent.getChange(key);
log.info("Found change - {}", change.toString());
}
// 更新相应的bean的属性值,主要是存在@ConfigurationProperties注解的bean
this.applicationContext.publishEvent(new EnvironmentChangeEvent(changeEvent.changedKeys()));
}
@Override
public void setApplicationContext(ApplicationContext applicationContext) throws BeansException {
this.applicationContext = applicationContext;
}
}
总结
将这个监听器放到项目中,在项目启动的时候修改配置 实时生效。
本文介绍了如何在Apollo中实现配置的自动更新监听,避免服务重启。文章详细讲解了Apollo与Nacos在配置监听上的区别,并提供了监听器的实现代码,使得在配置变更时能够实时生效。

1567

被折叠的 条评论
为什么被折叠?



