如果属性是整数,Spring @Value 总是会出错

Mel*_*ius 5 java spring dependency-injection

我正在使用 sprin 版本 4.3.8.RELEASE。我也使用@Value从属性文件注入值,如果属性是字符串那没问题,但如果属性Integer是一个问题(我知道有很多关于这个的问题,我尝试了所有的答案,但问题仍然存在)

该物业是

CONNECTION.TIME.OUT=100000
Run Code Online (Sandbox Code Playgroud)

第一个解决方案

@Value("${CONNECTION.TIME.OUT}")
protected Integer connectionTimeOut;
Run Code Online (Sandbox Code Playgroud)

例外

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}"
Run Code Online (Sandbox Code Playgroud)

第二种解决方案

@Value("#{new Integer('${CONNECTION.TIME.OUT}')}")
protected Integer connectionTimeOut;
Run Code Online (Sandbox Code Playgroud)

例外

EL1003E: A problem occurred whilst attempting to construct an object of type 'Integer' using arguments '(java.lang.String)'
Run Code Online (Sandbox Code Playgroud)

第三种解决方案

@Value("#{new Integer.parseInteger('${CONNECTION.TIME.OUT}')}")
protected Integer connectionTimeOut;
Run Code Online (Sandbox Code Playgroud)

例外

EL1003E: A problem occurred whilst attempting to construct an object of type 'Integer' using arguments '(java.lang.String)'
Run Code Online (Sandbox Code Playgroud)

任何想法为什么会这样

小智 7

为了避免这种由于属性不可用而发生异常的情况,在标签中添加默认值。如果属性不可用,则它将填充默认值

@Value("${CONNECTION.TIME.OUT:10}")
Run Code Online (Sandbox Code Playgroud)


Kar*_*cki 3

因为@Value("${CONNECTION.TIME.OUT}")你的错误是java.lang.NumberFormatException: For input string: "${CONNECTION.TIME.OUT}". 这意味着未处理表达式,导致Integer.parseInt("${CONNECTION.TIME.OUT}")抛出NumberFormatException.

PropertyPlaceholderConfigurerSpring 上下文中没有注册任何 bean 并且@Value注释没有被处理,或者没有CONNECTION.TIME.OUT定义属性。