在 Spring 引导 2 上配置 Jedis
Configuring Jedis on Spring boot 2
我正在尝试从 spring boot 1.5.5 迁移到 spring boot 2。我正在为 JedisPool
获取以下内容
Parameter 0 of method getJedisPool in com.company.spring.config.ApplicationConfig required a bean of type 'org.springframework.data.redis.connection.jedis.JedisConnectionFactory' that could not be found.
- Bean method 'redisConnectionFactory' in 'JedisConnectionConfiguration' not loaded because @ConditionalOnMissingBean (types: org.springframework.data.redis.connection.RedisConnectionFactory; SearchStrategy: all) found beans of type 'org.springframework.data.redis.connection.RedisConnectionFactory' redisConnectionFactory
我正在尝试使用 Jedis 而不是 lettuce 进行配置。按照文档中的建议导入 spring-starter-redis-data 时,我忽略了 lettuce 模块。
下面是试图初始化 JedisPool 的代码。
@Bean
public JedisPool getJedisPool(JedisConnectionFactory jedisConnectionFactory) {
String host = jedisConnectionFactory.getHostName();
int port = jedisConnectionFactory.getPort();
String password = StringUtils.isEmpty(jedisConnectionFactory.getPassword()) ? null : jedisConnectionFactory.getPassword();
int timeout = jedisConnectionFactory.getTimeout();
GenericObjectPoolConfig poolConfig = jedisConnectionFactory.getPoolConfig();
log.info("Starting Redis with Host:{}, Port:{}, Timeout:{}, PoolConfig:{}", host, port, timeout, poolConfig);
return new JedisPool(poolConfig, host, port, timeout, password);
}
我通过更改 bean 以使用 RedisProperties
解决了这个问题。这是最终运行的代码。
@Bean
public JedisPool getJedisPool(RedisProperties redisProperties) {
Pool jedisProperties = redisProperties.getJedis().getPool();
String password = StringUtils.isEmpty(redisProperties.getPassword()) ? null : redisProperties.getPassword();
int timeout = (int) redisProperties.getTimeout().toMillis();
GenericObjectPoolConfig poolConfig = new GenericObjectPoolConfig();
poolConfig.setMaxIdle(jedisProperties.getMaxIdle());
poolConfig.setMaxTotal(jedisProperties.getMaxActive() + jedisProperties.getMaxIdle());
poolConfig.setMinIdle(jedisProperties.getMinIdle());
log.info("Starting Redis with Host:{}, Port:{}, Timeout(ms):{}, PoolConfig:{}", redisProperties.getHost(), redisProperties.getPort(),
timeout, poolConfig);
return new JedisPool(poolConfig, redisProperties.getHost(), redisProperties.getPort(), timeout, password);
}
我不太确定这是否是在 SpringBoot 2.0 上配置 Jedis 的正确方法。无论如何,这是可行的。
我正在尝试从 spring boot 1.5.5 迁移到 spring boot 2。我正在为 JedisPool
获取以下内容Parameter 0 of method getJedisPool in com.company.spring.config.ApplicationConfig required a bean of type 'org.springframework.data.redis.connection.jedis.JedisConnectionFactory' that could not be found.
- Bean method 'redisConnectionFactory' in 'JedisConnectionConfiguration' not loaded because @ConditionalOnMissingBean (types: org.springframework.data.redis.connection.RedisConnectionFactory; SearchStrategy: all) found beans of type 'org.springframework.data.redis.connection.RedisConnectionFactory' redisConnectionFactory
我正在尝试使用 Jedis 而不是 lettuce 进行配置。按照文档中的建议导入 spring-starter-redis-data 时,我忽略了 lettuce 模块。
下面是试图初始化 JedisPool 的代码。
@Bean
public JedisPool getJedisPool(JedisConnectionFactory jedisConnectionFactory) {
String host = jedisConnectionFactory.getHostName();
int port = jedisConnectionFactory.getPort();
String password = StringUtils.isEmpty(jedisConnectionFactory.getPassword()) ? null : jedisConnectionFactory.getPassword();
int timeout = jedisConnectionFactory.getTimeout();
GenericObjectPoolConfig poolConfig = jedisConnectionFactory.getPoolConfig();
log.info("Starting Redis with Host:{}, Port:{}, Timeout:{}, PoolConfig:{}", host, port, timeout, poolConfig);
return new JedisPool(poolConfig, host, port, timeout, password);
}
我通过更改 bean 以使用 RedisProperties
解决了这个问题。这是最终运行的代码。
@Bean
public JedisPool getJedisPool(RedisProperties redisProperties) {
Pool jedisProperties = redisProperties.getJedis().getPool();
String password = StringUtils.isEmpty(redisProperties.getPassword()) ? null : redisProperties.getPassword();
int timeout = (int) redisProperties.getTimeout().toMillis();
GenericObjectPoolConfig poolConfig = new GenericObjectPoolConfig();
poolConfig.setMaxIdle(jedisProperties.getMaxIdle());
poolConfig.setMaxTotal(jedisProperties.getMaxActive() + jedisProperties.getMaxIdle());
poolConfig.setMinIdle(jedisProperties.getMinIdle());
log.info("Starting Redis with Host:{}, Port:{}, Timeout(ms):{}, PoolConfig:{}", redisProperties.getHost(), redisProperties.getPort(),
timeout, poolConfig);
return new JedisPool(poolConfig, redisProperties.getHost(), redisProperties.getPort(), timeout, password);
}
我不太确定这是否是在 SpringBoot 2.0 上配置 Jedis 的正确方法。无论如何,这是可行的。