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);
}
}
我有一个使用 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);
}
}