できるだけ多くのファイルを処理してから移動するというビジネス要件があります
レコード 98 の 100 レコードのファイルでエラーが発生した場合、その時点まで処理し、残りのファイルをスキップして次のファイルに移動できるようにしたいと考えています。
MultiResourcePartitioner でファイルを処理しています。
<batch:step id="processXMLstep">
<batch:tasklet transaction-manager="transactionManager">
<batch:chunk reader="myXmlItemReader" processor="myProcessor
Writer="myDBWriter" commit-interval="100" skip-limit="10000">
<batch:skippable-exception-classes>
<batch:include class="java.lang.Exception"/>
</batch:skippable-exception-classes>
</batch:chunk>
<batch:listeners>
<batch:listener ref="myFileNameListener" />
</batch:listeners>
</batch:tasklet>
<batch:end on="FAILED"/>
</batch:step>
リーダーは StaxEventItemReader を使用しています。
onProcessError()、onReadError()、onSkipInProcess()、onSkipInRead()、onSkipInWrite()、および onWriteError() メソッドをリスナーに追加しました。コードが OnReadError() メソッド (および XML エラーによっては onSkipInRead() メソッド) をヒットしていることがわかります。
OnReadError() で何かを実行して、ジョブがファイルの残りをスキップして次のファイルに移動するように強制することはできますか?