自Spring Boot Upgrade以来,Define Bean与@ConditionalOnMissingBean结合使用不起作用

时间:2019-04-17 13:36:45

标签: java spring spring-boot apache-kafka

我正在使用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

1 个答案:

答案 0 :(得分:1)

我找到了原因。

我不得不将返回类型从StreamsConfig更改为KafkaStreamsConfiguration

如果目标类的类型与已加载的Bean不同,则注释:@ConditionalOnMissingBean不起作用。

该错误消息具有误导性,因为该消息仅表示bean名称而不是bean类型。