@Value设置默认值后,获取不到配置值的原因分析
作者:误入歧途的羔羊
这篇文章主要介绍了@Value设置默认值后,获取不到配置值的原因,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
@Value设置默认值后,获取不到配置值
当前使用版本:Spring Framework version is 5.2.5.RELEASE
解析@Value的代码位置
org.springframework.beans.factory.support.AbstractBeanFactory#resolveEmbeddedValue
假设配置了
@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;
总结
以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。