我使用的是sprin版本4.3.8.RELEASE。我也使用@Value
从属性文件中注入值,如果属性是字符串没有问题,但如果属性是Integer
这是一个问题(我知道有很多问题,我试过所有的答案,但问题仍然存在)
该属性是
CONNECTION.TIME.OUT=100000
第一个解决方案
@Value("${CONNECTION.TIME.OUT}")
protected Integer connectionTimeOut;
Ecxeption
Failed to convert value of type 'java.lang.String' to required type 'java.lang.Integer'; nested exception is java.lang.NumberFormatException: For input string: "${CONNECTION.TIME.OUT}"
第二个解决方案
@Value("#{new Integer('${CONNECTION.TIME.OUT}')}")
protected Integer connectionTimeOut;
异常
EL1003E: A problem occurred whilst attempting to construct an object of type 'Integer' using arguments '(java.lang.String)'
第三种解决方案
@Value("#{new Integer.parseInteger('${CONNECTION.TIME.OUT}')}")
protected Integer connectionTimeOut;
异常
EL1003E: A problem occurred whilst attempting to construct an object of type 'Integer' using arguments '(java.lang.String)'
任何想法为什么是
答案 0 :(得分:3)
您的属性文件可能未正确加载。
如果没有为属性占位符提供有效值,Spring将自动尝试将此值分配给@Value
注释的名称。在你的情况下,这个:
@Value("#{new Integer('${CONNECTION.TIME.OUT}')}")
protected Integer connectionTimeOut;
被解释为:
protected Integer connectionTimeOut = new Integer("${CONNECTION.TIME.OUT}");
确实会带来错误。
尝试在bean中配置PropertyPlaceholderConfigurer
,或者确保配置中的属性文件在类路径中正确加载。以下几行:
<context:property-placeholder
ignore-unresolvable="true"
location="classpath:yourfile.properties" />
在这种情况下,在配置文件中会有所帮助。
答案 1 :(得分:2)
为避免因属性不可用而发生异常的此类情况,请在标记中添加默认值。如果属性不可用,则它将填充默认值
@Value( “$ {CONNECTION.TIME.OUT:10}”)
答案 2 :(得分:1)
对于@Value("${CONNECTION.TIME.OUT}")
,您的错误为java.lang.NumberFormatException: For input string: "${CONNECTION.TIME.OUT}"
。这意味着未处理表达式,导致Integer.parseInt("${CONNECTION.TIME.OUT}")
抛出NumberFormatException
。
在Spring上下文中没有注册PropertyPlaceholderConfigurer
bean,并且没有处理@Value
注释或者没有定义属性CONNECTION.TIME.OUT
。
答案 3 :(得分:0)
别忘了它周围的“ $ {}”!我一直在看那些本来应该是显而易见的东西,却错过了它。