Ошибка при создании Бина, хотя Бин Зависимости есть

У меня есть класс конфигурации с некоторыми зависимыми компонентами

public class WebConfig{
    @Bean
        @Qualifier("geojedis")
        public StringRedisTemplate geoJedisTemplate(
                @Qualifier("geographyJedisConnectionFactory") final JedisConnectionFactory connectionFactory) {

            // Create a RedisTemplate implementation which is basically of string
            // data structure.
            StringRedisTemplate redisTemplate = new StringRedisTemplate(connectionFactory);

            return redisTemplate;
        }

    @Bean
        @Qualifier("capacityStringRedisTemplate")
        public StringRedisTemplate capacityStringRedisTemplate(
                @Qualifier("capacityJedisConnectionFactory") final JedisConnectionFactory connectionFactory) {

            // Create a RedisTemplate implementation which is basically of string
            // data structure.
            StringRedisTemplate redisTemplate = new StringRedisTemplate(connectionFactory);

            return redisTemplate;
        }

    @Bean
        public JedisConnectionFactory geographyJedisConnectionFactory() {
            JedisConnectionFactory connectionFactory = new JedisConnectionFactory();
            return connectionFactory;
        }

    @Bean
        public JedisConnectionFactory capacityJedisConnectionFactory() {
            JedisConnectionFactory connectionFactory = new JedisConnectionFactory();
            return connectionFactory;
        }
    }

Но я получаю приведенную ниже ошибку. Когда я проверил конфигурации, все в порядке, и я также определил Qualifier для сопоставления правильных зависимостей. Любая помощь очень ценится.

  

org.springframework.beans.factory.UnsatisfiedDependencyException:   Ошибка создания компонента с именем 'redisTemplate', определенным в пути к классу   ресурс   [Орг /springframework /загрузки /Автоконфигурирование /Redis /RedisAutoConfiguration $ RedisConfiguration.class]:   Неудовлетворенная зависимость выражается через аргумент конструктора с   индекс 0 типа   [org.springframework.data.redis.connection.RedisConnectionFactory]::   Нет подходящего боба типа   [org.springframework.data.redis.connection.RedisConnectionFactory] является   определено: ожидаемый единственный соответствующий боб, но найдено 2:   geographyJedisConnectionFactory, capacityJedisConnectionFactory; вложенными   исключение   org.springframework.beans.factory.NoUniqueBeanDefinitionException: нет   квалифицирующий боб типа   [org.springframework.data.redis.connection.RedisConnectionFactory] является   определено: ожидаемый единственный соответствующий боб, но найдено 2:   geographyJedisConnectionFactory, capacityJedisConnectionFactory

4 голоса | спросил Vaisakh PS 28 22017vEurope/Moscow11bEurope/MoscowTue, 28 Nov 2017 13:50:17 +0300 2017, 13:50:17

1 ответ


0

Внутри RedisAutoConfiguration есть компонент, который создается, если в Spring Context по умолчанию нет "redisTemplate".

@Bean
@ConditionalOnMissingBean(name = "redisTemplate")
public RedisTemplate<Object, Object> redisTemplate(
        RedisConnectionFactory redisConnectionFactory) throws UnknownHostException {
    RedisTemplate<Object, Object> template = new RedisTemplate<>();
    template.setConnectionFactory(redisConnectionFactory);
    return template;
}

Для этого требуется один RedisConnectionFactory, но он находит два.

В качестве обходного пути вы можете создать фиктивный шаблон RedisTemplate с именем "redisTemplate" и не использовать его.

Поскольку он проверяет по имени бина, следующего может быть достаточно, если ничто не пытается @Autowire его:

@Bean
public Object redisTemplate() {
    return new Object();
}
ответил Yoory N. 28 22017vEurope/Moscow11bEurope/MoscowTue, 28 Nov 2017 16:59:23 +0300 2017, 16:59:23

Похожие вопросы

Популярные теги

security × 330linux × 316macos × 2827 × 268performance × 244command-line × 241sql-server × 235joomla-3.x × 222java × 189c++ × 186windows × 180cisco × 168bash × 158c# × 142gmail × 139arduino-uno × 139javascript × 134ssh × 133seo × 132mysql × 132