2016-11-30 20 views
3

我创建邮件服务配置的组件>>春天@Value不承认基于整数属性值

@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 protected] 
email.config.password=password 

我试着获取我的端口值,但我有问题>

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

是的,我知道这应该是一个整数值,但我的将@Value注释转换为String。所以我试过这个:

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

......得到了同样的结果。

主机,用户名,密码等加载好! 我如何获得我的端口值? 为什么PropertySource不会自动转换此参数?

+0

你为什么认为'@PropertySource(“classpath:mail.properties”)'属于那里? –

+0

所以你试过'parseInt('$ {email.port}')'?为什么?我的意思是,属性被命名为'email.config.port',而不是'email.port',对吧? – Andreas

+0

Yeap!我得到了错误设置$ {email.config.port}。对不起! – davidwillianx

回答

1

如果字符串表示一个整数,Spring可以将这些值从字符串转换为整数。

但是,如果spring无法找到属性中的属性,那么它将其值设置为它的(缺少)键。这导致一个字符串不能解析数字。

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

+0

高级在我的第一个答案。我发布了错误的@Value参数。我现在就改变这个东西。事实是,正确的参数(关键)不会使这个工程。 – davidwillianx

+0

@davidwillianx:你是否尝试过建议的基于字符串的测试? – Ralph

+0

你的意思是设置端口变量为字符串?我怎样才能将这个值设置为我的框架配置对象,因为它只允许int。 – davidwillianx