我正在尝试从.properties文件中获取redis.port和redis.host值。
在应用程序属性中,我具有:
spring.redis.host=localhost
spring.redis.port=6379
代码如下:
@Configuration
public class RedisConfig {
@Value("${spring.redis.host}")
private String redisHostName;
@Value("${spring.redis.port}")
private int redisPort;
@Bean
JedisConnectionFactory jedisConnectionFactory() {
JedisConnectionFactory factory = new JedisConnectionFactory();
factory.setHostName(redisHostName);
factory.setPort(redisPort);
factory.setUsePool(true);
return factory;
}
@Bean
RedisTemplate<String, Object> redisTemplate() {
RedisTemplate<String, Object> redisTemplate = new RedisTemplate<String, Object>();
redisTemplate.setConnectionFactory(jedisConnectionFactory());
return redisTemplate;
}
@Bean
RedisCacheManager cacheManager() {
RedisCacheManager redisCacheManager = new RedisCacheManager(redisTemplate());
return redisCacheManager;
}
}
主机名可以读取。 我无法读取redis端口的int值,它总是在抱怨bean的创建。
我也尝试在字符串中获取值:
@Value("${spring.redis.port}")
private String redisPortStr;
然后在Bean中我尝试做:
Integer.parseInt(redisPortStr)
在这种情况下,我有一个NumberFormatException。
错误是: Bean初始化失败;嵌套的异常是org.springframework.beans.TypeMismatchException:无法将类型“ java.lang.String”的属性值转换为属性“ integer”的必需类型“ int”;嵌套的异常是java.lang.NumberFormatException。
我有两个问题:
如何读取端口名的整数值?
我知道有人问here,但是解决方案没有帮助:
我在那里看到他们使用
@PropertySource("application.properties")
加上
@Bean
public static PropertySourcesPlaceholderConfigurer propertySourcesPlaceholderConfigurer() {
return new PropertySourcesPlaceholderConfigurer();
}
豆。 我已经添加了注释,但是存在相同的问题。 (尽管,添加注释对我来说不是一个解决方案,因为我们根据环境使用不同的属性文件,因此,如果可以避免的话,这样做会很有帮助)
我也应该添加@Bean 公共静态PropertySourcesPlaceholderConfigurer还是没有必要?
谢谢