Чтобы настроить LettuceConnectionFactory
, я создал две функции, которые имеют одинаковый тип возврата и разные параметры, одна - конфигурация одного узла, другая - конфигурация кластера. Код следующий:
@Component
@Configuration
public class RedisConfig {
@Bean(name = "singleFactory")
public LettuceConnectionFactory createSingleFactory(RedisSingleConfig redisSingleConfig){...}
@Bean(name = "clusterFactory")
public LettuceConnectionFactory createClusterFactory(RedisClusterConfig redisClusterConfig){...}
}
когда они вызываются, возвращаемое значение (LettuceConnectionFactory) является параметром другой функции. Код следующий:
@Autowired
private RedisActivityClusterConfig testConfig;
@Autowired
private RedisItemConfig redisItemConfig;
@Autowired
private RedisConfig redisConfig;
@Autowired
private StringRedisTemplate redisTemplate;
@Test
public void test(){
redisTemplate.setConnectionFactory(redisConfig.createClusterFactory(testConfig));
ValueOperations<String, String> valueOperations = redisTemplate.opsForValue();
System.out.println(valueOperations.get("test"));
}
Но, кстати, весна сообщит No qualifying bean of type 'org.springframework.data.redis.connection.RedisConnectionFactory' available: expected single matching bean but found 2: singleFactory,clusterFactory
Вопрос добавлен:
Поскольку проект немного сложнее, существует много серверов redis для отдельных серверов A, B, C ... и кластерных серверов A, B, C ..., и у них разные стратегии ip, port и pool. Моя оригинальная идея заключается в том, чтобы динамически генерировать разные LettuceConnectionFactories путем внедрения в разные redisConfig в качестве параметров, таких как RedisConfig_A, RedisConfig_B, RedisConfig_C (конфиги можно получить с помощью redis.properties в Resources), а затем использовать эти LettuceConnectionFactories для создания настроенных RedisTemplates. Мое замешательство заключается в том, могут ли эти объекты: RedisConfig, LettuceConnectionFactories быть автоматически подключены? Я пробовал много способов, но это не работает ...