2017-08-16 4 views
0

春のバッチで複数のxmlファイルを読み込み、読み込む前に各ファイルの名前を検証してコンテキストに入れる必要があります。どのように処理できますか? タスクレットとリーダーライタープロセッサーを使用してこのシナリオを持つことは可能ですか? :春のバッチを読み込んで検証する

folder : file1.xml file2.xml file3.xml 
validate filename (file1.xml) -- read file1 -- process -- write 
then 
validate filename (file2.xml) -- read file2 -- write 
validate filename (file3.xml) -- read file3 -- write 
...... 

またはその他の方法

+0

検証するファイルのみを処理するか、検証エラーが残りの処理を停止しますか? –

+0

有効なファイルを処理するのは – marie

答えて

1

これには3つの方法があります。それぞれには長所と短所があります。

は、あなたがファイル(processFiles言う)を処理ステップをpreceedes validateFileNameステップを使用してジョブを設定することができます
を検証するためのステップを使用してください。 validateFileNameステップは、必要なファイル名の検証を行い、次に処理するファイルを提供します。どのように通信するかは、有効なファイルを新しいディレクトリに移動するか、ジョブのExecutionContextを使用して処理するファイルの名前を格納するのと同じくらい複雑なものにすることができます。

この利点は、処理から検証を切り離すことです。欠点は、余分なステップがあるので、ジョブを少し複雑にすることです。

は、あなたが検証を行うためにStepExecutionListener#beforeStep()コールを使用することができ、検証
を行うにはStepExecutionListenerを使用してください。同じ概念は、検証するものとそうでないものとのやりとりの仕方に関して、以前と同じように適用されます。

これはあまり複雑ではないかもしれませんが、処理と検証をより緊密に(わずかながらも)組み合わせることができます。

は、それが
を読み込む前に、この最後のオプションは、MultiResourceItemReaderに似ていますが、それを読む前にファイルの検証にフックを提供ItemReader実装を記述することです検証ItemReaderを使用してください。ファイルが検証されない場合は、スキップします。

このオプションは、検証と処理を再度結合しますが、この特定のユースケースに対して再利用可能な抽象概念を提供する可能性があります。

こちらがお役に立てば幸いです。

+0

ありがとうございます@Michael – marie

関連する問題