【问题标题】:Handle redis cache availability with spring boot使用 Spring Boot 处理 Redis 缓存可用性
【发布时间】:2016-08-18 06:29:04
【问题描述】:

我有下面的缓存回购和其他方法,

@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 时抛出的异常并继续?

【问题讨论】:

  • 你检查你的本地服务Redis服务器是否启动了吗?
  • 即使 redis 服务器关闭,我仍然会得到一个 EnrollCashRepository 对象,填充默认值
  • 你用的是哪个版本的spring-boot?
  • @rajadilipkolli 1.3.4
  • 所以当你省略redis属性或redis关闭时,你不想注册EnrollCasheRepository,对吗?

标签: java spring spring-boot redis


【解决方案1】:

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

配置取决于在类路径中是否有 Jedis。
似乎没有测试来检查连接详细信息是否有效。

如果您希望根据配置的 jedis 创建 EnrollCasheRepository bean,实现它的最简单方法可能是使用 @ConditionalOnProperty 对其进行注释并创建功能标志配置值。

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

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

redis.enabled=true

如果你想更智能,比如在创建 bean 之前检测配置的 redis 服务器是否可用,那会更复杂。
您可以考虑将@Conditional 与您自己的Condition 实现一起使用,但这可能比它的价值更麻烦。
您最好先创建 bean,然后在事后测试它是否有效。

【讨论】:

  • Condition 是一个接口,因此不需要@ 符号。无论如何 +1 你的好答案
  • 即使我在其他 redis 配置中添加了 redis.enabled=true,我的过滤器中的 EnrollCashRepository 仍然为 null
  • 很难说,你确定你的过滤器是由spring初始化的,如果你退出条件注释,它会自动装配吗?
  • 实际上我的过滤器在调用中被命中两次。所以在第一次命中时 EnrollCashRepository 是空的,但在第二次命中它是自动装配的。它与使用 Spring boot 进行过滤器注册有关,我必须看起来是分开的。
  • 我还注意到,需要在 Autowired 时添加 required=false。 @Autowired(required=false)
猜你喜欢
  • 1970-01-01
  • 2022-01-17
  • 1970-01-01
  • 2017-09-18
  • 2022-11-21
  • 1970-01-01
  • 2022-08-20
  • 2022-01-05
  • 2018-11-29
相关资源
最近更新 更多