application中获取系统环境变量值与配置的名重复问题

application.yml配置文件中的配置:

test:
  url: ${D_ALG_URL:https://baidu.com}/bb

环境变量中的配置:

EXPORT TEST_URL="aa"

那么

@Value("${test.url}")
private String url;

获取到的值为"aa"
以下为找源码找到的原因
spring源码中

  1. QualifierAnnotationAutowireCandidateResolver#getSuggestedValue方法
  2. 找到调用者DefaultListableBeanFactory#doResolveDependency,里面有行代码是
String strVal = this.resolveEmbeddedValue((String)value);

这行代码就是根据value值,也就是"${test.url}",获取value的具体实现
3. 再往下找AbstractBeanFactory#resolveEmbeddedValue,再往下AbstractPropertyResolver#resolveRequiredPlaceholders,再往下PropertyPlaceholderHelper#parseStringValue,以下代码中

String propVal = placeholderResolver.resolvePlaceholder(placeholder);
  1. 再往下到PropertySourcesPropertyResolver#getPropertyAsRawString,再到getProperty方法,里面有行关键代码
Object value = propertySource.getProperty(key);

这行代码就是具体实现
5. 再往下到PropertySourcesPlaceholderConfigurer#getProperty, 到PropertySourcesPropertyResolver#getProperty方法中会遍历propertySources,找到系统环境变量(OriginAwareSystemEnvironmentPropertySource {name=‘systemEnvironment’})的配置,
也就是SystemEnvironmentPropertySource#resolvePropertyName,会将"test.url"中的".“转为”_",并将小写转化为大写,从而代码中获取到的${test.url}直接变成了系统环境变量中的值

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值