首页 文章

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

提问于
浏览
5

我用其他方法下面的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>

I am using EnrollCasheRepository in my filter with @Autowired.

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

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

1 回答

  • 9

    Spring引导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服务器是否可用,那么这将更复杂 .
    您可以使用自己的Condition实现@Conditional,但这可能比它的 Value 更麻烦 .
    你可能最好创建bean,然后测试它是否在事后工作 .

相关问题