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

Har*_*ana 5 java spring redis spring-boot

我用其他方法下面的Cache Repo,

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

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

}
Run Code Online (Sandbox Code Playgroud)

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

<dependency>
      <groupId>org.springframework.boot</groupId>
      <artifactId>spring-boot-starter-redis</artifactId>
</dependency>
Run Code Online (Sandbox Code Playgroud)

我正在使用EnrollCasheRepository我的过滤器@Autowired.

即使我注释掉了redis属性,application.properties我的redis服务器也崩溃了,但我仍然得到了一个EnrollCasheRepository对象.什么是更好的方法来检查redis是否安装在我的机器上,EnrollCasheRepository如果是这样的话继续.

如果没有安装redis并继续,我正在寻找一个更好的方法除了处理异常抛出?

Mag*_*nus 9

Spring-boot redis配置RedisAutoConfiguration 由此类提供,创建连接工厂并初始化StringRedisTemplatebean.

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

如果你想让你的EnrollCasheRepositorybean创建依赖于jedis的配置,实现它的最简单的方法可能是用它来注释@ConditionalOnProperty并创建一个功能标志配置值.

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

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

redis.enabled=true
Run Code Online (Sandbox Code Playgroud)

如果您想要更加智能化,比如在创建bean之前检测配置的redis服务器是否可用,那么这将更复杂.
你可以看一下使用@Conditional你自己的实现Condition,但这可能比它的价值更麻烦.
你可能最好创建bean,然后测试它是否在事后工作.