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