前言
最近接触到了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;
}
}
总结
将这个监听器放到项目中,在项目启动的时候修改配置 实时生效。
版权声明:本文为flowery_原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。