首页 > 解决方案 > 生菜或绝地之间的 Spring Auto Configuration 优先级

问题描述

我想使用 Lettuce 作为 Redis 客户端,这是 spring-boot-starter-data-redis-reactive 的默认依赖项。但是,我将 Jedis 作为依赖项从另一个编写为纯 Java 代码(没有 Spring)的组件继承。由于 JedisConnectionFactory 的存在,这会导致在初始化 LettuceConnectionFactory 时发生冲突。

如何在确保为我自己的代码初始化 LettuceConnectionFactory 的同时让 Jedis 依赖于其他组件的使用?使用 LetticeConnectionFactory 的主要原因是我的服务中的反应式编程。两个连接工厂都配置为通过 RedisAutoConfiguration 进行初始化,没有优先级选项。

https://github.com/spring-projects/spring-boot/blob/master/spring-boot-project/spring-boot-autoconfigure/src/main/java/org/springframework/boot/autoconfigure/data/redis/ RedisAutoConfiguration.java

标签: springspring-bootredisjedislettuce

解决方案


您可以通过创建自己的@Configuration类并在其中添加新的类来覆盖 RedisConnectionFactory @Bean

例如:

@Bean
RedisConnectionFactory myLettuceConnectionFactory() {
  // your setup....
  new LettuceConnectionFactory();
}

然后使用myLettuceConnectionFactorybean 设置 RedisTemplate@Bean

@Bean
public RedisTemplate<String, Object> redisTemplate() {
  final RedisTemplate<String, Object> template = new RedisTemplate<>();
  template.setConnectionFactory(myLettuceConnectionFactory());
  // other settings...
  return template;
}

推荐阅读