3

I want to use Lettuce as a Redis Client, which is the default dependency for spring-boot-starter-data-redis-reactive. However I am inheriting Jedis as a dependency from another component written as pure Java code (no Spring). This is resulting in a conflict when initializing LettuceConnectionFactory due to presence of JedisConnectionFactory.

How can I keep Jedis in dependency for other component's use while ensuring that LettuceConnectionFactory is initialised for my own code? The main reason for using LetticeConnectionFactory is reactive programming in my service. Both the connection factories are configured for initialization via RedisAutoConfiguration with no option of prioritisation.

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

1 Answers1

0

You could override RedisConnectionFactory by creating your own @Configuration class and adding new @Bean in it.

For example:

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

and then use myLettuceConnectionFactory bean to setup RedisTemplate @Bean

@Bean
public RedisTemplate<String, Object> redisTemplate() {
  final RedisTemplate<String, Object> template = new RedisTemplate<>();
  template.setConnectionFactory(myLettuceConnectionFactory());
  // other settings...
  return template;
}
Marius Jaraminas
  • 813
  • 1
  • 7
  • 19