Установка параметров подключения в RedisConnectionFactory

#java #spring #spring-boot

#java #весна #весенняя загрузка

Вопрос:

У меня есть простой Redis клиент, основанный на Spring приведенном ниже. По умолчанию он подключается к локальному хосту, но мне нужно установить другой хост и порт.

Я полагаю, я могу сделать это в функции ниже:

 @Bean
RedisMessageListenerContainer container(RedisConnectionFactory connectionFactory,MessageListenerAdapter listenerAdapter) {
    //LettuceConnectionFactory(connectionFactory);
    RedisMessageListenerContainer container = new RedisMessageListenerContainer();
    container.setConnectionFactory(connectionFactory);
    container.addMessageListener(listenerAdapter, new PatternTopic("chat"));

    return container;
}
  

Я обнаружил, что имя I класса connectionFactory is LettuceConnectionFactory и оно имеет закрытое поле client , содержащее информацию о подключении.

Как правильно изменить параметры подключения по умолчанию RedisConnectionFactory ?

Весь код:

 @SpringBootApplication
public class MessagingRedisApplication {

    private static final Logger lg = LoggerFactory.getLogger(MessagingRedisApplication.class);

    @Bean
    RedisMessageListenerContainer container(RedisConnectionFactory connectionFactory,MessageListenerAdapter listenerAdapter) {
        LettuceConnectionFactory(connectionFactory)
        lg.info( connectionFactory.toString() );
        RedisMessageListenerContainer container = new RedisMessageListenerContainer();
        container.setConnectionFactory(connectionFactory);
        container.addMessageListener(listenerAdapter, new PatternTopic("chat"));

        return container;
    }

    @Bean
    MessageListenerAdapter listenerAdapter(Receiver receiver) {
        return new MessageListenerAdapter(receiver, "receiveMessage");
    }

    @Bean
    Receiver receiver() {
        return new Receiver();
    }

    @Bean
    StringRedisTemplate template(RedisConnectionFactory connectionFactory) {
        return new StringRedisTemplate(connectionFactory);
    }

    public static void main(String[] args) throws InterruptedException {

        ApplicationContext ctx = SpringApplication.run(MessagingRedisApplication.class, args);

        StringRedisTemplate template = ctx.getBean(StringRedisTemplate.class);

        Receiver receiver = ctx.getBean(Receiver.class);

        while (receiver.getCount() == 0) {

            lg.info("Sending message...");

            template.convertAndSend("chat", "Hello from Redis!");
            Thread.sleep(500L);
        }

        System.exit(0);
    }
}
  

Ответ №1:

Для настройки подключений redis следует использовать свойства, предоставленные spring по умолчанию. Для хоста и порта должно быть достаточно следующих свойств.

 spring.redis.host=redis.yourhost.com
spring.redis.port=6379
  

Затем connectionfactory компонент будет создан с заданным хостом и портом. Весь набор свойств доступен здесь. Поиск с помощью spring.redis.

Ответ №2:

Если вы хотите программно настроить имя хоста вместо использования spring.redis свойств, вы можете создать свой собственный RedisConnectionFactory и передать RedisConfiguration его конструктору :

 @Bean
public RedisConnectionFactory redisConnectionFactory() {
    RedisConfiguration redisConfiguration = new RedisStandaloneConfiguration("myHostName");
    return new LettuceConnectionFactory(redisConfiguration);
}
  

В этом случае я предполагаю, что вы используете экземпляр с одним узлом, поэтому RedisStandaloneConfiguration используется.

Комментарии:

1. почему вы сделали из этого компонент? Почему без компонента соединение не устанавливается в шаблоне redis?