配置 Step
尽管 Step 所需的依赖项列表相对较短,但它是一个极其复杂的类,可能包含许多协作对象。
-
Java
-
XML
在使用 Java 配置时,您可以使用 Spring Batch 构建器,如以下示例所示
Java 配置
/**
* Note the JobRepository is typically autowired in and not needed to be explicitly
* configured
*/
@Bean
public Job sampleJob(JobRepository jobRepository, Step sampleStep) {
return new JobBuilder("sampleJob", jobRepository)
.start(sampleStep)
.build();
}
/**
* Note the TransactionManager is typically autowired in and not needed to be explicitly
* configured
*/
@Bean
public Step sampleStep(JobRepository jobRepository, (1)
PlatformTransactionManager transactionManager) { (2)
return new StepBuilder(jobRepository) (3)
.<String, String>chunk(10).transactionManager(transactionManager) (4)
.reader(itemReader())
.writer(itemWriter())
.build();
}
| 1 | repository:JobRepository 的 Java 特定名称,它在处理期间(提交之前)定期存储 StepExecution 和 ExecutionContext。 |
||
| 2 | transactionManager:Spring 的 PlatformTransactionManager,它在处理期间开始和提交事务。 |
||
| 3 | 步骤名称:当步骤声明为 bean 时,可以省略名称,将从方法名称派生。但是,如果步骤不是定义为 bean,则必须在 StepBuilder 构造函数中明确提供名称,例如 new StepBuilder("myStep", jobRepository)。 |
||
| 4 | chunk:依赖项的 Java 特定名称,表示这是一个基于项目的步骤,以及在事务提交之前要处理的项目数量。
|
为了简化配置,您可以使用 Spring Batch XML 命名空间,如以下示例所示
XML 配置
<job id="sampleJob" job-repository="jobRepository"> (2)
<step id="step1">
<tasklet transaction-manager="transactionManager"> (1)
<chunk reader="itemReader" writer="itemWriter" commit-interval="10"/> (3)
</tasklet>
</step>
</job>
| 1 | transaction-manager:Spring 的 PlatformTransactionManager,它在处理期间开始和提交事务。 |
||
| 2 | job-repository:JobRepository 的 XML 特定名称,它在处理期间(提交之前)定期存储 StepExecution 和 ExecutionContext。对于内联 <step/>(在 <job/> 中定义),它是 <job/> 元素上的一个属性。对于独立的 <step/>,它定义为 <tasklet/> 的一个属性。 |
||
| 3 | commit-interval:在事务提交之前要处理的项目数量的 XML 特定名称。
|
前面的配置包含创建面向项目的步骤所需的唯一依赖项
-
reader:提供项目进行处理的ItemReader。 -
writer:处理由ItemReader提供的项目的ItemWriter。
| 步骤中使用的事务管理器可能与作业存储库中使用的事务管理器不同。但是,需要注意的是,作业存储库和处理数据库将不在同一事务中,因此如果在处理之后但在作业存储库更新之前发生故障,则该步骤可能会重新执行并导致重复处理。这可以通过幂等处理或外部事务管理(例如 JTA)来缓解。 |