使用Spring从属性文件中设置int值

10 浏览
0 Comments

使用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;

它也不起作用。

请建议如何使其工作。

0
0 Comments

问题的出现原因是使用@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环境之间的差异,这超出了问题的范围。

如果以上解决方法适用于开发环境,请确认问题是否已解决。

0
0 Comments

问题原因:

出现这个问题的原因是表达式语言(SPEL)写错了。

解决方法:

修改表达式语言,将其改为正确的格式。

修改后的代码如下:

("#{ T(java.lang.Integer).parseInt('${rabitmq.server.host.connectionclosetimeout}') }")
private int connectionCloseTimeOut; 

请尝试运行以上代码,看看是否解决了问题。

如果还是有异常抛出,可能是其他原因导致的,请进一步排查。

0