Spring @Value不识别Interger属性值

时间:2016-11-30 16:57:04

标签: java spring

我正在为邮件服务配置>>

创建一个组件
@Component
@PropertySource("classpath:mail.properties")
public class Mail {

  @Value("${email.config.host}")
  private String host;

  @Value("${email.config.port}")
  private Integer port;

  @Value("${email.config.username}")
  private String username;
}

我的mail.properties文件看起来像>>

email.config.host=smtp.gmail.com
email.config.port=587
email.config.username=idontknowmyname@gmail.com
email.config.password=password

我试图获取我的端口值,但是我遇到了问题>

java.lang.NumberFormatException: For input string: "${email.config.port}"

是的,我知道这应该是一个Integer值,但我的@Value注释转换为String。所以我尝试了这个:

@Value("#{ T(java.lang.Integer).parseInt('${email.config.port}')}")

......也一样。

主机,用户名,密码等。加载好! 我怎样才能获得我的端口值? 为什么PropertySource没有自动转换此参数?

2 个答案:

答案 0 :(得分:1)

如果字符串表示整数,则Spring能够将这些值从字符串转换为整数。

但是如果spring无法在属性中找到属性,则将其值设置为其(缺失)键。这导致字符串不是可解析的数字。

因此Spring可能无法找到您的email.config.port属性。 - 您可以证明这一点,购买带有@Value("${email.config.port}")注释的字符串字段。

答案 1 :(得分:-2)

添加@Configuration注释以使用外部化值。