@Value本地配置了默认值(@Value(“${aa.xx:defaultValue}“)),后在配置中心配置了 aa.xx: remoteValue。启动项目远程配置没有覆盖本地配置原因

一、问题介绍

今天在开发项目时,采用@Value("${aa.bb: http://localhost:8081/url}") 配置了请求地址默认值,方便本地调试。发到测试环境时,在配置中心配置了aa.bb:http://xxxxxx/url 。因为之前有过经验,此时配置中心的值会覆盖本地默认值。但是实际在服务器测试时发现配置中心的配置没有生效。于是有了下面的问题分析。

二、@value值注入流程图

这里放一张自己为了理清@value值注入过程画的图。具体流程不讲了,要写太多。主要的类和方法已提供。欢迎交流,如果发现问题也请指教。

三、问题原因分析

对比了原项目。发现原因如下:

        1、低版本的springframework例如4.3.11,@value属性注入会走两个resolver;resolver1是spring-beans下的PropertyPlaceholderConfigurer内部类(图中橙色字第一个);resolver2是spring-context的PropertySourcesPlaceholderConfigurer类。(橙色第二个)。

        2、高版本的springframework例如5.2.10,废弃了resolver1中spring-beans下的PropertyPlaceholderConfigurer内部类。从而属性注入只走了spring-context下的。

        3、配置中心没有覆盖本地默认值,是由于低版本在走完resolver1,此时返回了配置的默认值,这个默认值不带${}符号。走到resolver2时,判断是否以 '${' 开头,以 '}' 结尾。否->直接返回了该默认值。

四、问题解决

        1、分析项目是否可以提升springframework版本

        2、删除本地默认配置

        3、是否可以自定义两个resolver的执行顺序还没看,正在看。有知道的朋友可以交流交流

  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值