使用spring boot处理redis缓存可用性

时间:2016-08-18 06:29:04

标签: java spring spring-boot redis

我在其他方法下面有Cache Repo,

@Component
@CacheConfig(cacheNames = "enroll", cacheManager = "springtoolCM")
public class EnrollCasheRepository {

    /** The string redis template. */
    @Autowired
    private StringRedisTemplate stringRedisTemplate;

}

我在pom中使用spring-boot-starter-redis。

<dependency>
      <groupId>org.springframework.boot</groupId>
      <artifactId>spring-boot-starter-redis</artifactId>
</dependency>

我在使用EnrollCasheRepository的过滤器中使用@Autowired

即使我在application.properties中注释掉redis属性,而且我的redis服务器也已关闭,但我仍然得到一个EnrollCasheRepository对象。检查redis是否安装在我的机器上并继续EnrollCasheRepository(如果是)的更好方法是什么。

我正在寻找一种更好的方法,除非在没有安装redis的情况下抛出异常并继续?

1 个答案:

答案 0 :(得分:9)

Spring {boot> redis配置由RedisAutoConfiguration提供 该类创建连接工厂并初始化StringRedisTemplate bean。

配置取决于在类路径上使用Jedis 似乎没有测试来检查连接细节是否有效。

如果您希望创建的EnrollCasheRepository bean依赖于jedis的配置,实现它的最简单方法可能是用@ConditionalOnProperty注释它并创建一个功能标志配置值。

@Component
@ConditionalOnProperty("redis.enabled")
@CacheConfig(cacheNames = "enroll", cacheManager = "springtoolCM")
public class EnrollCasheRepository {

将标志添加到application.properties(或等效的)

redis.enabled=true

如果你想更聪明一点,比如在创建bean之前检测配置的redis服务器是否可用,那就更复杂了。
您可以将@Conditional与您自己的Condition实施一起使用,但这可能比它的价值更麻烦。
你可能最好创建bean,然后测试它是否在事后发挥作用。