springboot加入redis+jedis后,redis未启动,项目也会启动失败,如何让项目启动和redis是否启动无关
时间: 2023-07-04 20:20:37 浏览: 215
在 Spring Boot 中通过使用 Jedis 来操作 Redis,使用 Jedis 时,当 Redis 服务器未启动时,会抛出 JedisConnectionException 异常导致项目启动失败。
为了让项目启动和 Redis 是否启动无关,可以在配置 JedisPool 时设置 testOnBorrow 为 false,这样就可以防止 Redis 未启动导致的连接异常,从而保证项目的正常启动。
示例代码如下:
```java
@Configuration
public class RedisConfiguration {
@Value("${spring.redis.host}")
private String host;
@Value("${spring.redis.port}")
private int port;
@Value("${spring.redis.password}")
private String password;
@Value("${spring.redis.database}")
private int database;
@Value("${spring.redis.timeout}")
private int timeout;
@Value("${spring.redis.jedis.pool.max-active}")
private int maxTotal;
@Value("${spring.redis.jedis.pool.max-idle}")
private int maxIdle;
@Value("${spring.redis.jedis.pool.min-idle}")
private int minIdle;
@Bean
public JedisPool jedisPool() {
JedisPoolConfig jedisPoolConfig = new JedisPoolConfig();
jedisPoolConfig.setMaxTotal(maxTotal);
jedisPoolConfig.setMaxIdle(maxIdle);
jedisPoolConfig.setMinIdle(minIdle);
jedisPoolConfig.setTestOnBorrow(false); // 关闭测试连接可用性
JedisPool jedisPool = new JedisPool(jedisPoolConfig, host, port, timeout, password, database);
return jedisPool;
}
@Bean
public RedisTemplate<String, Object> redisTemplate(JedisConnectionFactory jedisConnectionFactory) {
RedisTemplate<String, Object> redisTemplate = new RedisTemplate<>();
redisTemplate.setConnectionFactory(jedisConnectionFactory);
redisTemplate.setKeySerializer(new StringRedisSerializer());
redisTemplate.setValueSerializer(new GenericJackson2JsonRedisSerializer());
redisTemplate.setHashKeySerializer(new StringRedisSerializer());
redisTemplate.setHashValueSerializer(new GenericJackson2JsonRedisSerializer());
return redisTemplate;
}
@Bean
public JedisConnectionFactory jedisConnectionFactory(JedisPool jedisPool) {
JedisConnectionFactory jedisConnectionFactory = new JedisConnectionFactory();
jedisConnectionFactory.setPoolConfig(jedisPool().getPoolConfig());
jedisConnectionFactory.setHostName(host);
jedisConnectionFactory.setPort(port);
jedisConnectionFactory.setPassword(password);
jedisConnectionFactory.setDatabase(database);
jedisConnectionFactory.setTimeout(timeout);
return jedisConnectionFactory;
}
}
```
这样就可以在 Redis 未启动时,保证项目能够正常启动。