Spring batch 作业实例并行运行时的Spring批处理作业范围问题

Spring batch 作业实例并行运行时的Spring批处理作业范围问题,spring-batch,Spring Batch,我使用的是SpringBatch4,有一个包含4个步骤的作业定义,每个步骤包含一个tasklet。定义的作业范围bean很少。我的理解是,作业范围bean对于作业实例是唯一的。使用每次运行都唯一的作业参数调用作业 现在的问题是,在一个作业实例中创建的作业范围bean正在进入另一个作业实例。场景是第一个tasklet创建一个属于作业范围的bean,并在另一个tasklet中访问。当调用多个作业实例时,当作业实例2的step2 tasklet访问作业范围bean时,它将被注入由作业实例1创建的bea

我使用的是SpringBatch4,有一个包含4个步骤的作业定义,每个步骤包含一个tasklet。定义的作业范围bean很少。我的理解是,作业范围bean对于作业实例是唯一的。使用每次运行都唯一的作业参数调用作业

现在的问题是,在一个作业实例中创建的作业范围bean正在进入另一个作业实例。场景是第一个tasklet创建一个属于作业范围的bean,并在另一个tasklet中访问。当调用多个作业实例时,当作业实例2的step2 tasklet访问作业范围bean时,它将被注入由作业实例1创建的bean。理想情况下,应该传递在作业实例2中创建的bean

工作定义:

<batch:job id="batchJob">
    <batch:step id="step1">
        <tasklet ref="tasklet1" />
        <batch:next on="*" to="step2"/>
    </batch:step>

    <batch:step id="step2">
        <tasklet ref="tasklet2" />
        <batch:next on="*" to="step3"/>
    </batch:step>

    <batch:step id="step3">
        <tasklet ref="tasklet3" />
        <batch:next on="*" to="step4"/>
    </batch:step>

    <batch:step id="step4">
        <tasklet ref="tasklet4" />
    </batch:step>
</batch:job>
<bean id="testVo" class="com.test.model.report.TestVo" scope="job"/>
<bean class="org.springframework.batch.core.scope.JobScope" />
示例Tasklet定义及其对作业范围bean的访问

@Component
public class Tasklet2 implements Tasklet {

  /** The job scoped bean. */
  @Autowired
  private TestVo testVo;

  ....
}

上述配置中是否存在任何特定问题。为什么作业范围bean在作业实例之间混合?

如果您的tasklet正在创建类实例,那么它不是作业范围的。Springbean具有这些类型的作用域。我们必须看到有问题的bean的定义,以及如何使用它来理解正在发生的事情……我已经更新了这个问题,以包括如何定义作业范围bean以及如何将其注入tasklet
@Component
public class Tasklet2 implements Tasklet {

  /** The job scoped bean. */
  @Autowired
  private TestVo testVo;

  ....
}