首页 > 解决方案 > 模块化 = true 和 GenericApplicationContextFactory 的 Spring Batch 很麻烦

问题描述

我正在使用 Spring Batch@EnableBatchProcessing(modular = true)

问题在于,在这种模式下,您必须明确声明要初始化哪些 bean(即 Spring 需要扫描哪些类)

这是一个例子:

@Configuration
@EnableBatchProcessing(modular = true)
public class ModularJobsConfig {
    @Autowired
    private AutomaticJobRegistrar registrar;

    @PostConstruct
    public void initialize() {
        registrar.addApplicationContextFactory(new GenericApplicationContextFactory(
                SomeJobConfig.class,
                SomeJobTasklet.class,
                SomeClassToDefineTaskExecutor.class
                SomeClassToRunTheJob.class));
    }
}

可以想象,等我有好几份工作的时候,这个配置类会很臃肿。我怎样才能自动化呢?

值得一提的是,每个工作都有自己的包(例如com.example.jobs.<job_name>)+它们在不同的 maven-modules 中定义,但我认为这无关紧要。

进一步澄清

我有一个core包含上述配置的模块。每个作业都在一个单独的 maven 模块中定义,并在core.

主要是为了防止命名冲突,我正在使用@EnableBatchProcessing(modular = true)并且正在注册作业,AutomaticJobRegistrar如您在上面的示例代码中所见。

理想情况下,我希望 Spring 扫描 maven 依赖项并为我完成(即定义GenericApplicationContextFactory

目前,手动添加每个类很麻烦(在上面的示例中:SomeJobConfig.classSomeJobTasklet.class

作为一个反例,如果我不使用,modular=true我可以让 Spring Batch 自己加载所有 bean,但是我必须确保方法名称在所有模块中都是唯一的。

标签: javaspringspring-batch

解决方案


推荐阅读