2017-11-03 26 views
1

AbstractPaginatedDataItemReaderを拡張したカスタムアイテムリーダーを作成しました。 Springバッチでは、どの例外がジョブを停止するかどうかを管理できます(例外はスキップされます)。 「古典的な」スプリングバッチリーダーでスプリングバッチページリーダーと例外処理

doRead方法は、任意のExceptionをスロー。つまり、読み込み中にスキップされた例外がスローされた場合、項目はスキップされ、ジョブは実行を継続します。

しかし、ページ分割の読者に、次のデータページを取得するために使用doPageRead方法は、任意の例外をスローしません:

protected abstract Iterator<T> doPageRead(); 

doPageRead方法はdoRead 1によって呼び出されます。

protected T doRead() throws Exception { 

    synchronized (lock) { 
     if(results == null || !results.hasNext()) { 

      results = doPageRead(); 

      page ++; 

      if(results == null || !results.hasNext()) { 
       return null; 
      } 
     } 


     if(results.hasNext()) { 
      return results.next(); 
     } 
     else { 
      return null; 
     } 
    } 
} 

doPageReadメソッドはスローされた例外を宣言しません。つまり、スキップされた例外はRuntimeExceptionに限られますか?ページングリーダ -

おかげ

答えて

0

春バッチリーダーは、最終的ItemReaderかかわらず、それはページングリーダーまたは非あるのです。最終的には単一のアイテムをプロセッサに渡し、read()メソッド契約が重要であることを意味します。ページングリーダー -

ページング読者は、単に彼らが実際に通常の非よりもより異なるアイテムを読みますがありません方法についての最適化を持っています。

私の意見では、doReadPage()メソッドの外観は不必要なようですが、重要なのはread()メソッド契約です。

あなたはどんな問題に直面している(それはあなたの質問から明らかではない)場合、私に知らせてください。