Spring QA配置文件和bean名称



我有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的bean,并确保您得到消息:

没有类型为"org.springframework.kafka.core.ConsumerFactory<java.lang"的合格bean。String,>'因为Spring尝试按类型绑定bean。但是如果你声明bean的id(例如@Bean("primeEmployeeConsumerFactory")), Spring尝试通过id绑定,你应该在bean使用的地方使用@Qualifier。

更多信息见此处

相关内容

最新更新