跳到主要内容
版本:6.0.2

配置步骤

DeepSeek V3 中英对照 Configuring a Step

尽管一个 Step 所需的依赖项列表相对较短,但它是一个极其复杂的类,可能包含许多协作组件。

使用 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, 1
PlatformTransactionManager transactionManager) { 2
return new StepBuilder(jobRepository) 3
.<String, String>chunk(10).transactionManager(transactionManager) 4
.reader(itemReader())
.writer(itemWriter())
.build();
}
  • repositoryJobRepository 的 Java 特定名称,用于在处理期间(恰好在提交之前)定期存储 StepExecutionExecutionContext

  • transactionManager:Spring 的 PlatformTransactionManager,用于在处理期间开始和提交事务。

  • 步骤名称:当步骤被声明为 bean 时,名称可以省略,并将从方法名派生。但是,如果步骤定义为 bean,则必须像 new StepBuilder("myStep", jobRepository) 这样显式地将名称提供给 StepBuilder 构造函数。

  • chunk:依赖项的 Java 特定名称,表示这是一个基于项的步骤,以及在提交事务之前要处理的项数。

备注

注意 repository 默认为 jobRepository(通过 @EnableBatchProcessing 提供),transactionManager 默认为 transactionManager(从应用上下文提供)。事务管理器是可选的,默认为 ResourcelessTransactionManager。此外,ItemProcessor 是可选的,因为项可以直接从读取器传递给写入器。

  • [#] 注意 repository 默认为 jobRepository(通过 @EnableBatchProcessing 提供),transactionManager 默认为 transactionManager(从应用上下文提供)。事务管理器是可选的,默认为 ResourcelessTransactionManager。此外,ItemProcessor 是可选的,因为项可以直接从读取器传递给写入器。

前面的配置包含了创建面向项目的步骤所需的唯一依赖项:

  • reader: 提供待处理项目的 ItemReader

  • writer: 处理 ItemReader 所提供项目的 ItemWriter

备注

步骤中使用的交易管理器可能与作业存储库中使用的不同。但需要注意的是,作业存储库和处理数据库不会处于同一交易中,因此如果在处理完成后、作业存储库更新前发生故障,该步骤可能会被重新执行,从而导致重复处理。这可以通过幂等处理或外部交易管理(例如 JTA)来缓解。