我有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,它们使用这些consumerFactories:
@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());
}
我将得到一个错误,我没有任何bean的ConsumerFactory<String, String>
。我哪里出错了?
在第一个示例中,声明了两个类型为ConsumerFactory
没有类型为"org.springframework.kafka.core.ConsumerFactory<java.lang"的合格bean。String,>'因为Spring尝试按类型绑定bean。但是如果你声明bean的id(例如@Bean("primeEmployeeConsumerFactory")
), Spring尝试通过id绑定,你应该在bean使用的地方使用@Qualifier。
更多信息见此处