1

I am trying to start my application with Redis Sentinel in my local System.

When I start the application its being stopped with below error. I have started redis in my windows machine with master on 6379 port, replica on 6380 and 6381 ports and sentinels on 26379,26380,26381 ports. I can connect to redis servers with redis-cli command.

Exception encountered during context initialization - cancelling refresh attempt: org.springframework.beans.factory.BeanCreationException: Error creating bean with name \u0027redisConnectionFactory\u0027 defined in class path resource [org/springframework/boot/autoconfigure/data/redis/LettuceConnectionConfiguration.class]: Bean instantiation via factory method failed; nested exception is org.springframework.beans.BeanInstantiationException: Failed to instantiate [org.springframework.data.redis.connection.lettuce.LettuceConnectionFactory]: Factory method \u0027redisConnectionFactory\u0027 threw exception; nested exception is java.lang.IllegalStateException: Invalid redis sentinel property \u0027127.0.0.1\u0027"

Below is my redis config class.

@Configuration
public class RedisConfigurations {

    private final RedisProperties redisProperties;

    @Value("${spring.redis.host}")
    private String redisHost;

    @Value("${spring.redis.port}")
    private Integer redisPort;

    @Value("${spring.redis.database}")
    private Integer database;

    @Value("${spring.redis.password}")
    private String redisPwd;


    @Bean
    protected LettuceConnectionFactory redisConnectionFactory() {
        RedisSentinelConfiguration sentinelConfig = new RedisSentinelConfiguration()
                .master(redisProperties.getSentinel().getMaster());
        redisProperties.getSentinel().getNodes().forEach(s -> sentinelConfig.sentinel(s, redisProperties.getPort()));
        sentinelConfig.setPassword(RedisPassword.of(redisProperties.getPassword()));
        sentinelConfig.setDatabase(database);
        return new LettuceConnectionFactory(sentinelConfig, LettuceClientConfiguration.defaultConfiguration());
    }

    public <T> Jackson2JsonRedisSerializer<T> configureJackson2JsonRedisSerializer(Class<T> t) {
        Jackson2JsonRedisSerializer<T> jackson2JsonRedisSerializer = new Jackson2JsonRedisSerializer<>(t);
        jackson2JsonRedisSerializer.setObjectMapper(new ObjectMapper());
        return jackson2JsonRedisSerializer;
    }

    @Bean
    public RedisTemplate<String, Object> redisTemplate() {
        final RedisTemplate<String, Object> redisTemplate = new RedisTemplate<>();
        redisTemplate.setKeySerializer(new StringRedisSerializer());
        redisTemplate.setHashKeySerializer(new GenericToStringSerializer<>(Object.class));
        redisTemplate.setValueSerializer(configureJackson2JsonRedisSerializer(Object.class));
        redisTemplate.setHashValueSerializer(new JdkSerializationRedisSerializer());
        redisTemplate.setValueSerializer(new JdkSerializationRedisSerializer());
        redisTemplate.setConnectionFactory(redisConnectionFactory());
        return redisTemplate;
    }

And below is my application yml props.

spring:
  application:
    name: some-app
  profiles:
    active: local
  main:
    allow-bean-definition-overriding: true
  redis:
    host: 127.0.0.1
    port: 26380
    database: 0
    sentinel:
      master: master
      nodes:
        - 127.0.0.1
        - 127.0.0.1
        - 127.0.0.1
    lettuce:
      shutdown-timeout: 100ms
      pool:
        max-active: 5
        min-idle: 2
        max-wait: 1ms

0 Answers0