关于apollo刷新带有@ConfigurationProper
2021-10-30 本文已影响0人
virtual灬zzZ
apollo动态刷新,应用在@value这种注入方式的属性没有问题,但是如果使用@ConfigurationProperties注解的bean,动态刷新就不好使了,会注入不到的。
@ConfigurationProperties
如果需要在Apollo配置变化时自动更新注入的值,需要配合使用EnvironmentChangeEvent或RefreshScope。
比如我们自定义的某个bean,也有spring cloud gateway 注入routeDefination 那样嵌死在源码里头,我们都可以使用官网给出的方式去解决。
@Component
public class RefresherApolloConfig implements ApplicationContextAware {
private ApplicationContext applicationContext;
@ApolloConfigChangeListener(interestedKeyPrefixes = "spring.cloud.gateway.")
public void onChange(ConfigChangeEvent changeEvent) {
refreshGatewayProperties(changeEvent);
}
private void refreshGatewayProperties(ConfigChangeEvent changeEvent) {
System.out.println("Refreshing spring cloud gateway properties!");
/**
* rebind configuration beans
*/
this.applicationContext.publishEvent(new EnvironmentChangeEvent(changeEvent.changedKeys()));
System.out.println("spring cloud gateway properties refreshed!");
}
@Override
public void setApplicationContext(ApplicationContext applicationContext) throws BeansException {
this.applicationContext = applicationContext;
}
}