Spring 引导:排除一些自动配置的 beans

Spring boot: excluding some autoconfigured beans

我有一个使用 spring-kafka 的 Spring 引导项目。在这个项目中,我构建了一些包装 spring-kafka bean 的事件驱动组件(即 KafkaTemplate 和 ConcurrentKafkaListenerContainer)。我想让这个项目成为一个跨一组 Spring 启动应用程序的可重用库。但是,当我从 spring 启动应用程序向该库添加依赖项时,我在应用程序启动时遇到错误:

APPLICATION FAILED TO START


Description:

Parameter 1 of method kafkaListenerContainerFactory in org.springframework.boot.autoconfigure.kafka.KafkaAnnotationDrivenConfiguration required a bean of type 'org.springframework.kafka.core.ConsumerFactory' that could not be found.
    - Bean method 'kafkaConsumerFactory' in 'KafkaAutoConfiguration' not loaded because @ConditionalOnMissingBean (types: org.springframework.kafka.core.ConsumerFactory; SearchStrategy: all) found bean 'kafkaConsumerFactory'


Action:

Consider revisiting the conditions above or defining a bean of type 'org.springframework.kafka.core.ConsumerFactory' in your configuration.

因为我需要自动装配一个 ConsumerFactory<A, B>(而不是 ConsumerFactory<Object, Object>),所以我在一个配置 class 中创建了这个 bean,它用 @EnableConfigurationProperties(KafkaProperties.class) 注释

我只需要重用 org.springframework.boot.autoconfigure.kafka.KafkaProperties 而无需在 KafkaAutoConfiguration 和 KafkaAnnotationDrivenConfiguration 中自动配置其他 bean。

我尝试将 @EnableAutoConfiguration(exclude = KafkaAutoConfiguration.class) 放入我的库中,但这并不能阻止依赖于我的库的应用程序触发 spring-库中排除了kafka自动配置。

如何指定我不想在我的库中自动配置某些 bean(KafkaAutoConfiguration 和 KafkaAnnotationDrivenConfiguration),但在任何依赖此库的应用程序中也是如此

我相信依赖库的应用程序本身必须从它们的自动配置中排除那些类。

将相同的内容放入 servlet 初始化程序对我有用。

 @SpringBootApplication(exclude = KafkaAutoConfiguration.class)
public class Application extends SpringBootServletInitializer{

        @Override
        protected SpringApplicationBuilder configure(SpringApplicationBuilder application) {
            return application.sources(Application .class);
        }


        public static void main(String[] args) {
            SpringApplication.run(GncApplication.class, args);
        }

    }