配置 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 repositoryJobRepository 的 Java 特定名稱,它在處理期間(提交之前)定期儲存 StepExecutionExecutionContext
2 transactionManager:Spring 的 PlatformTransactionManager,它在處理期間開始和提交事務。
3 步驟名稱:當步驟宣告為 bean 時,可以省略名稱,將從方法名稱派生。但是,如果步驟不是定義為 bean,則必須在 StepBuilder 建構函式中明確提供名稱,例如 new StepBuilder("myStep", jobRepository)
4 chunk:依賴項的 Java 特定名稱,表示這是一個基於專案的步驟,以及在事務提交之前要處理的專案數量。
請注意,repository 預設值為 jobRepository(透過 @EnableBatchProcessing 提供),transactionManager 預設值為 transactionManager(從應用程式上下文提供)。事務管理器是可選的,預設為 ResourcelessTransactionManager。此外,ItemProcessor 是可選的,因為專案可以直接從讀取器傳遞給寫入器。

為了簡化配置,您可以使用 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-repositoryJobRepository 的 XML 特定名稱,它在處理期間(提交之前)定期儲存 StepExecutionExecutionContext。對於內聯 <step/>(在 <job/> 中定義),它是 <job/> 元素上的一個屬性。對於獨立的 <step/>,它定義為 <tasklet/> 的一個屬性。
3 commit-interval:在事務提交之前要處理的專案數量的 XML 特定名稱。
請注意,job-repository 預設值為 jobRepositorytransaction-manager 預設值為 transactionManager。此外,ItemProcessor 是可選的,因為專案可以直接從讀取器傳遞給寫入器。

前面的配置包含建立面向專案的步驟所需的唯一依賴項

  • reader:提供專案進行處理的 ItemReader

  • writer:處理由 ItemReader 提供的專案的 ItemWriter

步驟中使用的事務管理器可能與作業儲存庫中使用的事務管理器不同。但是,需要注意的是,作業儲存庫和處理資料庫將不在同一事務中,因此如果在處理之後但在作業儲存庫更新之前發生故障,則該步驟可能會重新執行並導致重複處理。這可以透過冪等處理或外部事務管理(例如 JTA)來緩解。
© . This site is unofficial and not affiliated with VMware.