Spring batch Spring批处理-同时执行一个作业的多个实例

Spring batch Spring批处理-同时执行一个作业的多个实例,spring-batch,Spring Batch,我有一个澄清 我们是否可以同时运行一个作业的多个实例 目前,我们在任何给定时间都有一个作业实例 如果可能的话,请告诉我怎么做。是的,一个作业的多个实例(或执行)完全有可能同时运行。是的,您可以非常并行地运行任务,正如文件所述 但有些事情需要考虑 您的应用程序逻辑需要并行执行吗?因为如果要并行运行步骤,则必须小心并构建应用程序逻辑,以便并行步骤所做的工作不会重叠(除非这是应用程序的意图) 是的,你可以。Spring Batch根据作业参数区分作业。因此,如果总是向同一个作业传递不同的作业参数,那

我有一个澄清

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

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


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

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

是的,您可以非常并行地运行任务,正如文件所述

但有些事情需要考虑

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

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


    结束时的布尔值“true”向Spring Batch发出信号,要求将该参数用作作业实例“标识”的一部分,因此每次“运行”作业时都会得到新实例。

    这是一个老问题,但我想澄清的是,OP询问的是“同一作业的多个实例”是否可以并行运行。您提供的链接是指在一次并行执行中运行步骤,这是一个不同的概念。谢谢您的回答,Antonio Dias。我们添加了时间戳作为作业参数的一部分,而不是随机id。
    final JobParametersBuilder jobParametersBuilder = new JobParametersBuilder();
    jobParametersBuilder.addString("instance_id", UUID.randomUUID().toString(), true);
    jobLauncher.run(job,jobParametersBuilder.toJobParameters());