我正在使用Spring Boot Starter版本2.0.8.RELEASE,并尝试升级到:2.1.4.RELEASE。 我收到以下错误:
The bean 'defaultKafkaStreamsConfig', defined in class path resource [org/springframework/boot/autoconfigure/kafka/KafkaStreamsAnnotationDrivenConfiguration.class], could not be registered. A bean with that name has already been defined in class path resource [com/mycompany/stream/configuration/StreamsConfiguration.class] and overriding is disabled.
Bean定义为:
public class StreamsConfiguration {
@Bean(name = KafkaStreamsDefaultConfiguration.DEFAULT_STREAMS_CONFIG_BEAN_NAME)
public StreamsConfig kStreamsConfigs(StreamsConfigFactory factory) {
Map<String, Object> additionalProperties = new HashMap<>();
addConfigurationProperties(additionalProperties);
return factory.build(additionalProperties);
}
}
Spring Kafka库中的bean带有注释:@ConditionalOnMissingBean
。
我已经通过用@AutoConfigureBefore
和@Primary
注释Bean来尝试过。
在Spring Boot中发生了什么变化,即上下文加载现在与以前的版本有所不同?
这只是一个简单的示例,这在我的代码的很多部分都发生了。
顺便说一句:我已经使用@EnableAutoConfigure
。
答案 0 :(得分:1)
我找到了原因。
我不得不将返回类型从StreamsConfig
更改为KafkaStreamsConfiguration
。
如果目标类的类型与已加载的Bean不同,则注释:@ConditionalOnMissingBean
不起作用。
该错误消息具有误导性,因为该消息仅表示bean名称而不是bean类型。