【问题标题】:Spring Batch - Executing multiple instances of a job at same timeSpring Batch - 同时执行作业的多个实例
【发布时间】:2012-06-12 11:58:13
【问题描述】:

我有一个澄清。

我们是否可以同时运行多个作业实例。

目前,我们在任何给定时间都有一个作业实例。

如果可以的话,请告诉我怎么做。

【问题讨论】:

    标签: spring-batch


    【解决方案1】:

    是的,你可以。 Spring Batch 根据 JobParameters 区分作业。因此,如果您总是将不同的 JobParameters 传递给同一个作业,那么您将运行同一个作业的多个实例。 一个简单的方法就是在每个请求中添加一个 UUID 参数来启动一个作业。 示例:

    final JobParametersBuilder jobParametersBuilder = new JobParametersBuilder();
    jobParametersBuilder.addString("instance_id", UUID.randomUUID().toString(), true);
    jobLauncher.run(job,jobParametersBuilder.toJobParameters());
    

    结束时的布尔值“true”向 Spring Batch 发出信号,以将该参数用作作业实例的“身份”的一部分,因此您将始终在作业的每次“运行”时获得新实例。

    【讨论】:

    • 感谢您的回答,安东尼奥·迪亚斯。我们添加了时间戳作为作业参数的一部分,而不是随机 id。
    【解决方案2】:

    是的,您可以像 here 所记录的那样并行运行许多任务

    但是有一些事情需要考虑

    • 您的应用程序逻辑是否需要并行执行?因为如果您要并行运行步骤,则必须注意并构建应用程序逻辑,以便并行步骤完成的工作不会重叠(除非这是您的应用程序的意图)

    【讨论】:

    • 这是一个老问题,但我想澄清一下,OP 询问是否可以并行运行“[同一个]作业的多个实例”。您提供的链接是指在单个执行中并行运行步骤,这是一个不同的概念。
    【解决方案3】:

    是的,一个作业的多个实例(或执行)完全可以同时运行。

    【讨论】:

      猜你喜欢
      • 2014-12-10
      • 2020-02-25
      • 2020-06-03
      • 2013-11-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-11-21
      • 2016-03-16
      相关资源
      最近更新 更多