无法从.properties中检索整数

时间:2017-11-01 18:39:09

标签: java spring

当我尝试使用我在application.properties中设置的整数时,我一直收到java.lang.NumberFormatException:null错误。

这是我的application.properties

my.prop.for.func=25

这是我从.properties文件中检索值并将其转换为稍后在函数中使用的整数的方法。

@Value("${my.prop.for.func}")
private String myPropForFuncStr;
private int myPropForFunc = Integer.parseInt(myPropForFuncStr);

我尝试了将属性转换为整数的其他方法,例如 @Value("#{new int(' $ {my.prop.for.func}')}")但他们给出了其他错误,这似乎是最简单的方法。

我可能收到NumberFormatException:Null错误,因为myPropForFuncStr为null。我总是从.properties文件中检索这样的值,所以为什么它现在搞乱了?如果这不是问题,还有什么可以给出NumberFormatException:Null错误?

3 个答案:

答案 0 :(得分:3)

首先,Spring框架已经为您处理了自动装箱。这意味着您可以直接将注释添加到int变量中。

@Value("${my.prop.for.func}")
private Integer myPropForFunc; // Note that this needs to be an object and not a primitive data type.

现在,针对您的问题,您可能想要检查您的班级是否已使用@PropertySource注释进行注释。如果您使用Spring启动来初始化您的应用程序,那么它应该自动读取您的application.properties文件并将这些属性适当地注入字段。但如果不是,那么您需要使用@PropertySource注释来注释您的班级。即使你使用Spring启动,你的设置也不会有效,因为在成功初始化bean之后将评估@Value,但是你在字段本身初始化myPropForFunc的值。

这是一个显示注释用法的示例。 https://www.mkyong.com/spring/spring-propertysources-example/

答案 1 :(得分:1)

Spring在实例化后使用带注释的属性初始化类。这意味着,在spring加载属性之前将调用“Integer.parseInt”调用,因为该类已经初始化了。

您有几种方法可以解决这个问题:

  1. 使用@PostConstruct注释编写void init方法。在此方法中,所有与弹簧相关的信息都已加载。

  2. 编写一个getter,它总是在运行时解析为整数调用

  3. 我认为春天也可以处理:

    @Value( “$ {my.prop.for.func}”) private Integer myPropForFuncInt;

答案 2 :(得分:0)

在您尝试将其转换为int时,不会启动

myPropForFuncStr。 我建议直接在@Value

添加myPropForFunc
@Value("${my.prop.for.func}")
private int myPropForFunc = Integer.parseInt(myPropForFuncStr);