配置步骤
尽管 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,则必须像new StepBuilder("myStep", jobRepository)那样,将名称显式提供给StepBuilder构造函数。 |
||
| 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)来缓解。 |