我有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>
. 我哪里出错了?
1条答案
按热度按时间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。有关更多信息,请参见此处