2017-06-06 8 views
0

私は、データを処理するためにチャンクリーダー、プロセッサ、およびライタのパターンを使用しています。私が取ったアプローチは、Readerのreadメソッドに行く前に、私はdbに接続し、すべての必要なデータを取得するSQLを実行します。これは@BeforeStepで注釈が付けられたメソッドで行われ、出力データはこの生成されたデータを反復処理し、プロセッサーの読み取りごとに項目を取得するReaderのreadメソッドのソースになります。フロー中にスローされた例外は@Retryable機能を使用して捕捉され、再試行され、スキップ可能な例外機能を使用してスキップされます。@BeforeStepでアノテーションされたメソッドでスローされた例外をスキップする方法

私にとって紛らわしいことの1つは、@BeforeStepで注釈が付けられたメソッドにスローされた例外がすべてキャッチされ、スキップ可能なカスタム例外がシステムによってスキップされないアプリによってスローされることです。これは望ましい動作か、何かが欠落していますか?これで私を助けてください。

おかげで、 raveendra

+0

のための「工程間でデータを渡すには、バッチ春」@BeforeStep内のデータを引っ張るための具体的な理由であり、直接ItemReaderベースのSQLを使用していませんか? –

+0

@LucaBassoRicci - これはデザイン通りです。接続をオープンし、大きなSQLを実行してデータをフェッチし、取得したデータを処理したいとします。 – paul

答えて

0

デザイン力あなたがDBからデータを取得する場合は、合理的な解決策は、メインの前にステップを作成し、この新しいステップに@BeforeStepからコードを移動することです。スキップ可能な例外とリトライ状態をリスナーよりもうまく管理できます。

この回答を見ることができます(Can we write a Spring Batch Job Without ItemReader and ItemWriter)。 Tasklet#execute()書き込み中のようなもの:またのためにSOチェック

class MyTasklet implements Tasklet { 
@Override 
public RepeatStatus execute(StepContribution contribution, ChunkContext chunkContext) throws Exception { 
    // Fetch data using JdbcTemplate (for example) and pull to external bean to let extracted data visible to next step 
    return RepeatStatus.FINISHED; 
} 
} 

余分な情報

+0

@ LucaBassoRicci - これはオプションとして聞こえる。私は理解しようとしています、プラットホームによるそのようなケースのサポートはありますか? – paul

関連する問題