#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?