springqa概要文件和bean名称

ltqd579y  于 2021-07-24  发布在  Java
关注(0)|答案(1)|浏览(324)

我有4个bean,它们取决于我的应用程序的配置文件,现在我用qa配置文件运行我的应用程序:

@Bean
    @Profile("!qa")
    public ConsumerFactory<String, String> eventConsumerFactory() {
        return new DefaultKafkaConsumerFactory<>(saslConsumerConfig(eventConsumerConfig()));
    }

    @Bean
    @Profile("!qa")
    public ConsumerFactory<String, String> primeEmployeeConsumerFactory() {
        return new DefaultKafkaConsumerFactory<>(saslConsumerConfig(primeEmployeeConsumerConfig()));
    }

    @Bean
    @Profile("qa")
    public ConsumerFactory<String, String> simpleEventConsumerFactory() {
        return new DefaultKafkaConsumerFactory<>(eventConsumerConfig());
    }

    @Bean
    @Profile("qa")
    public ConsumerFactory<String, String> simplePrimeEmployeeConsumerFactory() {
        return new DefaultKafkaConsumerFactory<>(primeEmployeeConsumerConfig());
    }

我还有另外两种豆子,他们使用这些消费工厂:

@Bean
    public KafkaListenerContainerFactory<ConcurrentMessageListenerContainer<String, String>>
    kafkaEventListenerContainerFactory(ConsumerFactory<String, String> eventConsumerFactory) {
        ConcurrentKafkaListenerContainerFactory<String, String> factory = new ConcurrentKafkaListenerContainerFactory<>();
        factory.setConsumerFactory(eventConsumerFactory);
        factory.setAutoStartup(autoStartupFlag);
        return factory;
    }

    @Bean
    public KafkaListenerContainerFactory<ConcurrentMessageListenerContainer<String, String>>
    kafkaPrimeEmployeeListenerContainerFactory(ConsumerFactory<String, String> primeEmployeeConsumerFactory) {
        ConcurrentKafkaListenerContainerFactory<String, String> factory = new ConcurrentKafkaListenerContainerFactory<>();
        factory.setConsumerFactory(primeEmployeeConsumerFactory);
        factory.setAutoStartup(autoStartupFlag);
        return factory;
    }

我的代码坏了,我出错了 No qualifying bean of type 'org.springframework.kafka.core.ConsumerFactory<java.lang.String, java.lang.String>' available: expected single matching bean but found 2: simpleEventConsumerFactory,simplePrimeEmployeeConsumerFactory 但当我尝试命名qa bean时:

@Bean("eventConsumerFactory")
    @Profile("qa")
    public ConsumerFactory<String, String> simpleEventConsumerFactory() {
        return new DefaultKafkaConsumerFactory<>(eventConsumerConfig());
    }

    @Bean("primeEmployeeConsumerFactory")
    @Profile("qa")
    public ConsumerFactory<String, String> simplePrimeEmployeeConsumerFactory() {
        return new DefaultKafkaConsumerFactory<>(primeEmployeeConsumerConfig());
    }

我会得到一个我不知道的错误 ConsumerFactory<String, String> . 我哪里出错了?

g2ieeal7

g2ieeal71#

在第一个示例中,您声明了两个类型为consumerfactory<string,string>的bean,并确保收到以下消息:
由于spring尝试按类型绑定jourbean,因此没有类型为org.springframework.kafka.core.consumerfactory<java.lang.string,java.lang.string>的合格bean。但是如果您声明bean的id(例如 @Bean("primeEmployeeConsumerFactory") )spring尝试通过id绑定,您应该在bean使用位置使用@qualifier。
有关更多信息,请参见此处

相关问题