Spring 使用@EnableBatchProcessing(modular=true)时,不考虑为BatchConfigurer提供的实现
我正在开发一个使用Spring Boot的Spring批处理示例应用程序。我的要求是:Spring 使用@EnableBatchProcessing(modular=true)时,不考虑为BatchConfigurer提供的实现,spring,spring-boot,spring-batch,Spring,Spring Boot,Spring Batch,我正在开发一个使用Spring Boot的Spring批处理示例应用程序。我的要求是: 拥有自己的BasicBatchConfigurer实现,以便在使用不支持databaseType的SAP HANA as DB时配置AsyncTaskExecutor和自己的数据源 我想使用@EnableBatchProcessing(modular=true),这样我就可以注册多个作业并使用单独的子上下文启动它们 我已经添加了所有必需的配置。如果未设置modular=true,作业将启动并按预期工作。它
- 拥有自己的
实现,以便在使用不支持databaseType的SAP HANA as DB时配置AsyncTaskExecutor和自己的数据源BasicBatchConfigurer
- 我想使用
,这样我就可以注册多个作业并使用单独的子上下文启动它们@EnableBatchProcessing(modular=true)
- 看起来,当我们设置modular=true时,
使用ModularBatchConfigurationBatchConfigurationSelector
- 在ModularBatchConfiguration中,有一个字段
。这已被注释为Collection configurers
@autowired
- 如果我提供了一个实现,我假设这个字段是自动初始化的
在
类的注释中也提到了ModularBatchConfiguration
batchconfigurator
- 然而,在调试时,我意识到上面的字段仍然为空,因为它加载了
,并遵循默认流程李>DefaultBatchConfigurer
ModularBatchConfiguration
中没有初始化该字段configurers
?我错过什么了吗
我使用的是SpringBoot2.1.2
我的问题是,为什么字段配置器没有在ModularBatchConfiguration中初始化?我错过什么了吗
您在META-INF/Spring.factories
文件中定义的Spring引导自定义自动配置和Spring批处理配置之间遇到了生命周期问题
我调试了您的代码,下面是如何解决此问题:
org.springframework.boot.autoconfigure.enableautoconfigure=\
com.example.job.data.persistence.config.AsyncBatchConfigurer
来自META-INF/spring.factories
文件。这不需要作为Spring批处理
将在声明为bean时检测AsyncBatchConfigurer
。
您甚至可以删除这个spring.factories
文件AsyncBatchConfigurer
中删除@ConditionalOnMissingBean(BatchConfigurer.class)
:
由于您将该类声明为@Configuration
类,因此它也将被定义为BatchConfigurer
类型的bean,并将被ModularBatchConfiguration
ModularBatchConfiguration
中的字段configurers
与您的AsyncBatchConfigurer
正确地自动连接
作为旁注,您不需要使用AsyncBatchConfigurer\configurers
方法,因为Spring将在ModularBatchConfiguration
中注入所有BatchConfigurer
bean
希望这有帮助