Apollo(阿波罗)是携程框架部门研发的配置管理平台,能够集中化管理应用不同环境、不同集群的配置,配置修改后能够实时推送到应用端。
在SpringCloud 项目使用apollo时,当使用到@ConfigurationProperties相关的配置时,有两种动态刷新的方案:EnvironmentChangeEvent或RefreshScope(注意是类而非注解)ranrefreshScope.refresh方案对eureka、zuul等第三方框架不兼容的问题
refreshScope.refresh方案对eureka、zuul等第三方框架不兼容的问题
官方给出的方案是通过refresh指定name的bean的方式来刷新该配置类。
该方法会抛出含有指定bean名称的RefreshScopeRefreshedEvent的Spring事件。
然而由于eureka也有对该事件的监听,并且eureka并没有判断bean的名称,直接下线再上线服务。
这样就导致,标注了@ConfigurationProperties的apollo相关配置,在运行时如果想动态更新,势必会引起如Eureka之类的第三方框架的“刷新”动作。
使用EnvironmentChangeEvent方案【推荐】
在springcloud的context中,EnvironmentChangeEvent被定义为环境变更的事件,适用于环境配置的重新绑定。而一般第三方框架也很少会对该事件做出“功能性”的刷新动作。
接入方式: