如果属性为Integer,Spring @Value始终会给出错误

gdx19jrr  于 2022-10-30  发布在  Spring
关注(0)|答案(5)|浏览(270)

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

CONNECTION.TIME.OUT=100000

第一个解决方案

@Value("${CONNECTION.TIME.OUT}")
protected Integer connectionTimeOut;

满意

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)'

知道为什么吗

sd2nnvve

sd2nnvve1#

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

@Value("${CONNECTION.TIME.OUT:10}")
wvyml7n5

wvyml7n52#

您的属性文件可能未正确加载。
如果没有为属性占位符提供有效的值,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" />

在您的配置文件中将有帮助,在这种情况下。

h9a6wy2h

h9a6wy2h3#

对于@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属性。

zqdjd7g9

zqdjd7g94#

试着去掉单引号“”。对我很有效。
@Values (“#{新整数(${连接时间输出})}”)

toe95027

toe950275#

别忘了它周围的“${}”!我一直在看本应该很明显的东西,却错过了它。

相关问题