配置 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)來緩解。 |