【问题标题】:Spring Batch - dynamic job selectionSpring Batch - 动态作业选择
【发布时间】:2016-03-19 08:41:00
【问题描述】:

我越来越熟悉 Spring Batch,因为我相信我们的项目需要用它来替换我们当前的代码库(以使开发更快、更容易测试)。

我们当前的代码库具有以下重要特征:

  • 一个代码库 - 但有很多批处理(我们在批处理之间重用代码)
  • 目前,我们在代码库中有多个 main() 方法,只是有不同的 shell 脚本来调用正确的主类。

我希望在 Spring 批处理中解决以下问题:

我已经开始了一个基于 Spring Batch 示例的虚拟实验项目:https://spring.io/guides/gs/batch-processing/

我想在同一个代码库中保留多个批处理(如果我们谈论 Spring Batch,我会选择作业)。但是,目前,如果我在我的代码中添加更多作业,它们都会被执行。更糟糕的是,我在 SpringBoot 主类中添加了一个应用程序侦听器,结果发现,作业在 ApplicationReadyEvent 之前执行 - 这对我来说似乎很糟糕,几乎就像在构造函数中运行业务逻辑一样。

我的问题是:

  • 如何选择要运行的作业(基于命令行参数)
  • 如何确保作业在 ApplicationReadyEvent 之后启动

提前致谢。

【问题讨论】:

    标签: java spring spring-boot spring-batch


    【解决方案1】:

    有各种各样的问题。

    1。 要禁用在启动时自动启动所有作业,只需配置此Spring Boot property

    spring.batch.job.enabled=false # Do not execute all Spring Batch jobs in the context on startup.
    

    2。 你会像这样运行工作:

    java -Dspring.batch.job.names=prepareTeaJob -jar target/0910-job-parameters-cli-0.0.2-SNAPSHOT.jar sugarAmount="no sugar"
    

    糖量有Job参数。属于此列表的完整示例托管在 my Github Repository here 中。顺便说一句,如果您正在学习 Spring Batch,还有更多涵盖这些 Spring Batch 主题的示例。

    3。 不确定您所说的“ApplicationReadyEvent”是什么。 AFAIK 作业应在 Spring 上下文完全初始化后执行。

    【讨论】:

      【解决方案2】:

      我的解决方案如下:

      • 将 spring.batch.job.enabled 属性设置为 false - 这会阻止作业在设置上下文时启动

      • 让 JobLauncher 脱离上下文并自己运行任何 Job:

        SpringApplication app = new SpringApplication(BatchProcessingServiceStarter.class);
        app.setWebEnvironment(false); 
        
        ConfigurableApplicationContext ctx=app.run(args);
        JobLauncher jobLauncher = ctx.getBean(JobLauncher.class);
        JobParameters jobParameters = new JobParametersBuilder()
            .addDate("date", new Date())
            .toJobParameters();  
        
        if(!"1".equals(args[0])){       
            jobLauncher.run(ctx.getBean("BatchConfiguration2", Job.class), jobParameters);                   
        } else {
            jobLauncher.run(ctx.getBean("BatchConfiguration1",  Job.class), jobParameters);   
        } 
        

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2019-06-09
        • 2018-05-18
        • 2014-12-24
        • 1970-01-01
        • 1970-01-01
        • 2016-10-03
        • 2019-06-10
        • 1970-01-01
        相关资源
        最近更新 更多