2

JdbcCursorItemReader を使用して DB テーブルからデータを読み取り、FlatFileItemWriter を使用してフラット ファイルに書き込む春のバッチ アプリケーションがあります。

アプリケーションをテストすると、JdbcCursorItemReader を介して DB からデータが返されない場合でも、FlatFileItemWriter がファイルを作成することがわかります。しかし、DBに適切なデータがない場合、仕事を失敗する予定です。そうすることは可能ですか、少なくとも FlatFileItemWriter がファイルを作成するのを防ぐことはできますか?

よろしく

4

4 に答える 4

5

http://static.springsource.org/spring-batch/reference/html/patterns.htmlから

11.7。入力が見つからない場合のステップ完了の処理

多くのバッチシナリオでは、処理するデータベースまたはファイルに行が見つからないことも例外ではありません。ステップは単に作業が見つからなかったと見なされ、0個のアイテムが読み取られて完了します。Spring Batchですぐに提供されるすべてのItemReader実装は、デフォルトでこのアプローチになっています。入力が存在する場合でも何も書き出されない場合、これは混乱を招く可能性があります。(これは通常、ファイルの名前が間違っている場合などに発生します)このため、メタデータ自体を調べて、フレームワークが処理されていることがわかった作業量を判断する必要があります。ただし、入力が見つからないことが例外的であると見なされた場合はどうなりますか?この場合、メタデータをプログラムでチェックして、処理されたアイテムがなく、障害が発生していないかどうかを確認するのが最善の解決策です。これは一般的なユースケースであるため、リスナーには次の機能のみが提供されます。

public class NoWorkFoundStepExecutionListener extends StepExecutionListenerSupport {

public ExitStatus afterStep(StepExecution stepExecution) {
    if (stepExecution.getReadCount() == 0) {
        return ExitStatus.FAILED;
    }
    return null;
}

}
于 2012-02-29T23:52:36.473 に答える
1

そうすることは可能ですか、少なくとも FlatFileItemWriter がファイルを作成するのを防ぐことはできますか?

質問の 2 番目の部分では、FlatFileItemWriterには、何も書き込まれていない場合にファイルを削除するフラグがあります。

shouldDeleteIfEmpty : 閉じるときに (ヘッダーとフッター以外に) 行が書き込まれていない場合、ターゲット ファイルを削除する必要があることを示すフラグ。

于 2013-03-19T17:33:51.570 に答える
0

ItemProcessor は、ItemReader がオブジェクトを返す場合にのみ呼び出されます。Null 値は、処理が終了したことを示すために使用されます。

null 値をエラー表示として使用しないでください。その目的は処理を終了することです。エラーには例外を使用することをお勧めします。

于 2011-04-11T08:28:43.467 に答える
0

ItemReadListener の afterRead メソッドは、データがなくても呼び出されます。あなたはおそらくそこにあなたが望むものを置くことができます。

于 2011-04-07T14:58:31.623 に答える