java

关注公众号 jb51net

关闭
首页 > 软件编程 > java > @Value设置默认值后,获取不到配置值

@Value设置默认值后,获取不到配置值的原因分析

作者:误入歧途的羔羊

这篇文章主要介绍了@Value设置默认值后,获取不到配置值的原因,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教

@Value设置默认值后,获取不到配置值

当前使用版本:Spring Framework version is 5.2.5.RELEASE

解析@Value的代码位置

org.springframework.beans.factory.support.AbstractBeanFactory#resolveEmbeddedValue

image

假设配置了

@value("${server.servlet.context-path:/}")

1、当存在多个值解析器时,如果第一个解析器获取不到配置项(server.servlet.context-path)的值,那么resolveStringValue方法将返回默认值(本例中既是 /)

2、上一个值解析器的返回值,作为下一个值解析器resolveStringValue的参数传递进去。因此,即使第二个值解析器有配置了值,那么也不可能进行正确的解析了,这导致了结果始终返回默认值

@Value注解获取配置信息时提示 Could not resolve placeholder ‘xxx‘ in value “${xxx}“

问题的原因很简单,就是获取不到配置信息

解决方法

先检查一下配置文件是否存在,注意不同环境使用不同配置文件的情况。

再检查配置文件中是否有这个配置属性,如果没有,可以在配置文件中加上该配置属性,也可以在@Value引入到属性名后加上冒号,表示在获取不到配置信息赋予默认值,比如下面获取不到my.name配置信息时 myName 的值为空字符串

@Value("${my.name:}")
String myName;

总结

以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。

您可能感兴趣的文章:
阅读全文