配置步骤
尽管 Step 所需的依赖项列表相对较少,但它是一个极其复杂的类,可能包含许多协作者。
- Java
- XML
在使用 Java 配置时,您可以使用 Spring Batch 构建器,如下例所示:
/**
* 注意 JobRepository 通常会自动注入,不需要显式配置
*/
@Bean
public Job sampleJob(JobRepository jobRepository, Step sampleStep) {
return new JobBuilder("sampleJob", jobRepository)
.start(sampleStep)
.build();
}
/**
* 注意 TransactionManager 通常会自动注入,不需要显式配置
*/
@Bean
public Step sampleStep(JobRepository jobRepository, 2
PlatformTransactionManager transactionManager) { 1
return new StepBuilder("sampleStep", jobRepository)
.<String, String>chunk(10, transactionManager) 3
.reader(itemReader())
.writer(itemWriter())
.build();
}
transactionManager: Spring 的PlatformTransactionManager,用于在处理过程中开始和提交事务。repository: Java 特定名称的JobRepository,在处理期间(提交前)定期存储StepExecution和ExecutionContext。chunk: Java 特定名称的依赖项,表示这是一个基于项的步骤以及在事务提交之前要处理的项数。
注意,默认情况下 repository 为 jobRepository(通过 @EnableBatchProcessing 提供),transactionManager 默认为 transactionManager(从应用程序上下文中提供)。此外,ItemProcessor 是可选的,因为项可以直接从读取器传递到写入器。
为了简化配置,您可以使用 Spring Batch 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>
transaction-manager: Spring 的PlatformTransactionManager,用于在处理过程中开始和提交事务。job-repository: XML 特定名称的JobRepository,在处理期间(提交前)定期存储StepExecution和ExecutionContext。对于内联<step/>(定义在<job/>内部的步骤),它是<job/>元素的属性。对于独立的<step/>,它是<tasklet/>的属性。commit-interval: XML 特定名称的项数,在事务提交之前要处理的项数。
注意,默认情况下 job-repository 为 jobRepository,transaction-manager 默认为 transactionManager。此外,ItemProcessor 是可选的,因为项可以直接从读取器传递到写入器。
前面的配置包括了创建以项为导向的步骤所需的唯一必需依赖项:
-
reader: 提供要处理的项目的ItemReader。 -
writer: 处理由ItemReader提供的项目的ItemWriter。