标签:applicationContext Feign Apollo url changedKey 参数 changedKeys apollo event
1:问题描述
项目中,使用apollo服务,来管理配置,在feign的url参数上使用${}的形式,获取配置文件的参数,在本地没有问题,但是使用了apollo后,发现该参数一直获取的是本地的配置文件参数,apollo别的参数都是好的,使用@Value(“${}”)获取也是可以的,但是feign上的占位符始终获取不到apollo的值
2:问题原因分析
1:首先apollo确保与本地配置文件的参数名是一致的(此错误几乎不会发生)
2:spring的加载,才是造成这种情况的主要原因之一,首先spring在启动时,它就会扫描到FeignClient这个注解,然后会直接填值,此时apollo的配置还没有加载,所以根本就没有apollo的参数。所以解决这个问题其实很简单,那就是打开apollo的饥饿加载。
3:apollo连接的环境不一致(该错误可能会发生)
3:解决问题核心配置
1::针对【问题原因分析】中第二条,解决方案是一条配置,如下:
apollo.bootstrap.eagerLoad.enabled=true
2:针对【问题原因分析】中第三条,解决方案是增加apollo的监听器,代码如下,粘贴即用:
@Slf4j @Component public class ApolloChangeListener implements ApplicationContextAware { private ApplicationContext applicationContext; @Autowired RefreshScope refreshScope; @ApolloConfigChangeListener( // 要监听的namespace value = {"application"} ) public void configChange(ConfigChangeEvent event) { // 配置变更后的数据集合 Set<String> changedKeys = event.changedKeys(); for (String changedKey : changedKeys) { log.warn("apollo修改配置 key = {},apollo历史参数值:{},修改后参数值:{}",changedKey,event.getChange(changedKey).getOldValue(),event.getChange(changedKey).getNewValue()); } this.applicationContext.publishEvent(new EnvironmentChangeEvent(event.changedKeys())); refreshScope.refreshAll(); } @Override public void setApplicationContext(ApplicationContext applicationContext) throws BeansException { this.applicationContext = applicationContext; } }
在apollo中进行修改和发布,看控制台会不会打印并输出,即可知道是不是连接对了apollo地址
标签:applicationContext,Feign,Apollo,url,changedKey,参数,changedKeys,apollo,event 来源: https://www.cnblogs.com/aiqingbi-aifeifei/p/16596802.html
本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享; 2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关; 3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关; 4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除; 5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。