definebean与@conditionalonmissingbean的组合在spring引导升级后不起作用

toiithl6  于 2021-06-06  发布在  Kafka
关注(0)|答案(1)|浏览(357)

我使用的是springbootstarterversion2.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 .
我已经试过了,用以下注解我的bean: @AutoConfigureBefore 以及 @Primary .
在spring boot中,上下文加载与以前的版本有什么不同?
这只是一个简单的例子,这发生在我的代码的许多部分。
顺便说一句:我已经用过了 @EnableAutoConfigure .

vs91vp4v

vs91vp4v1#

我找到了原因。
我不得不把返回类型从 StreamsConfigKafkaStreamsConfiguration .
注解: @ConditionalOnMissingBean 如果目标类与其类型不同于已加载的bean,则不起作用。
错误消息是误导性的,因为消息只是表示bean名称,而不是bean类型。

相关问题