スキップロジックの構成
処理中に発生したエラーが Step の失敗につながるべきではなく、代わりにスキップする必要がある多くのシナリオがあります。これは通常、データ自体とその意味を理解している人が行う必要がある決定です。たとえば、財務データは、完全に正確である必要がある送金につながるため、スキップできない場合があります。一方、ベンダーのリストをロードすると、スキップが可能になる場合があります。フォーマットが正しくないか、必要な情報が欠落しているためにベンダーがロードされない場合、おそらく課題はありません。通常、これらの悪いレコードもログに記録されます。これについては、後でリスナーについて説明するときに説明します。
Java
XML
次の Java の例は、スキップ制限の使用例を示しています。
@Bean
public Step step1(JobRepository jobRepository, PlatformTransactionManager transactionManager) {
int skipLimit = 10;
var skippableExceptions = Set.of(FlatFileParseException.class);
SkipPolicy skipPolicy = new LimitCheckingExceptionHierarchySkipPolicy(skippableExceptions, skipLimit);
return new StepBuilder("step1", jobRepository)
.<String, String>chunk(10).transactionManager(transactionManager)
.reader(flatFileItemReader())
.writer(itemWriter())
.faultTolerant()
.skipPolicy(skipPolicy)
.build();
} メモ: skipLimit は、skipLimit() メソッドを使用して明示的に設定できます。
次の XML の例は、スキップ制限の使用例を示しています。
<step id="step1">
<tasklet>
<chunk reader="flatFileItemReader" writer="itemWriter"
commit-interval="10" skip-limit="10">
<skippable-exception-classes>
<include class="org.springframework.batch.infrastructure.item.file.FlatFileParseException"/>
</skippable-exception-classes>
</chunk>
</tasklet>
</step> 前の例では、FlatFileItemReader が使用されています。いずれかの時点で、FlatFileParseException がスローされた場合、アイテムはスキップされ、合計スキップ制限 10 に対してカウントされます。宣言された例外 (およびそのサブクラス) は、チャンク処理 (読み取り、プロセス、書きます)。ステップ実行内での読み取り、処理、書き込みのスキップは個別にカウントされますが、制限はすべてのスキップに適用されます。スキップ制限に達すると、次に見つかった例外によってステップが失敗します。つまり、10 回目ではなく、11 回目のスキップで例外がトリガーされます。
スキップ制限はすべてのスキップ (読み取り、処理、書き込み) に適用されます。 |