使用Spring从属性文件中设置int值
使用Spring从属性文件中设置int值
尝试使用Spring从属性文件绑定int值,但每次都会出现以下异常:
无法实例化[org.springframework.amqp.rabbit.connection.ConnectionFactory]:工厂方法'connectionFactory'抛出异常;嵌套异常是java.lang.NumberFormatException:对于字符串输入:“$ {rabitmq.server.host.connectionclosetimeout}”
原因是:java.lang.NumberFormatException:对于字符串输入:“$ {rabitmq.server.host.connectionclosetimeout}”}}
我的属性文件如下所示:
rabitmq.server.host.connectionclosetimeout=30000
我的Bean
@Value(“$ {rabitmq.server.host.connectionclosetimeout}”)
private int connectionCloseTimeOut;
配置类
@Configuration
@PropertySource(“classpath:config/service.properties”)
public class RabbitMqConfiguration {
@Value(“$ {rabitmq.server.host.connectionclosetimeout}”)
private Integer connectionCloseTimeOut;
/**
* 建立连接
*
* @return
*/
@Bean
public ConnectionFactory connectionFactory(){
CachingConnectionFactory connectionFactory = new CachingConnectionFactory(host);
connectionFactory.setCloseTimeout(connectionCloseTimeOut);
return connectionFactory;
}
}
如果我添加下面的bean,那么它可以正常工作。但我想在没有下面的bean的情况下工作
@Bean
public static PropertySourcesPlaceholderConfigurer placeHolderConfigurer(){
return new PropertySourcesPlaceholderConfigurer();
}
我还尝试了以下方法:
@Value(“#{new Integer.parseInt('$ {rabitmq.server.host.connectionclosetimeout}')}”)
private int connectionCloseTimeOut;
它也不起作用。
请建议如何使其工作。
问题的出现原因是使用@PropertySource
注解时无法解析属性文件中的占位符${...}
,需要注册PropertySourcesPlaceholderConfigurer
来解析占位符。解决方法有两种,一种是通过静态方法注册PropertySourcesPlaceholderConfigurer
,另一种是在XML配置文件中配置<context:property-placeholder>
。
在XML中使用<context:property-placeholder location="classpath:config/service.properties" />
配置PropertySourcesPlaceholderConfigurer
,或者使用以下静态方法注册PropertySourcesPlaceholderConfigurer
:
public static PropertySourcesPlaceholderConfigurer placeHolderConfigurer() { return new PropertySourcesPlaceholderConfigurer(); }
需要注意的是,问题解决方法中提到了一个Spring JIRA ticket和一个Stack Overflow的线程,可以作为参考。
对于在UAT环境中无法工作的问题,需要检查开发环境和UAT环境之间的差异,这超出了问题的范围。
如果以上解决方法适用于开发环境,请确认问题是否已解决。