2017-05-09 18 views
0

私のETLプロジェクトの1つにSpring Batchを使用しています。私が直面している問題は、ライターの段階です。そのためのコードスニペットを以下に示します。最初のサービスコールの間に挿入している間、私はエラーを取得する場合DBクエリーが失敗した場合、例外がSpringバッチのWriterにスローされない

public void write(List<? extends Employee> employeeList) throws Exception { 

    for (Employee emp : employeeList) { 
     try { 
      employeeService.insertEmployeeBasicDetails(emp); 
      employeeService.insertEmployeeCompensationDetails(emp); 
     } catch(Exception e) { 
      log.error(e); 
     }    
    } 
} 

は、それが例外を与えるものではありませんが、それは2回目の呼び出しに移動します。これらの呼び出しがすべて完了すると、エラーがスローされますが、エラーをキャッチするキャッチブロックがなくなり、ジョブの再開に失敗します。

ここに何か不足していますか?

答えて

0

例外がスローされていないため、tryブロックが「例外を出さない」可能性があります。与えられたコードでは、書き込みメソッドがキャッチされない例外をスローするためには、tryブロック(この場合はcatchブロック内)から抜け出しています。これがあなたのコードであれば、catchブロック内にブレークポイントを置き、log.error(e);が例外をスローしないことを確認してください。

+0

私はデバッガを追加しましたが、catchブロックには届きません。 – shawGate

+0

最初の通話中にどのようなエラーが表示されますか? 'insertEmployeeBasicDetails'がどのようにインプリメントされているかについてもっと詳しく説明していただければ幸いです。 – Bonron

+0

このエラーは、ステップが失敗してもすべて正常に動作することがわかりました:ここではエラーが発生しました原因:java.sql.BatchUpdateException:Can notメソッドをvarcharで呼び出します。 ; SQL []; varcharでメソッドを呼び出せません。ネストされた例外はjava.sql.BatchUpdateExceptionです。varcharのメソッドを呼び出すことはできません。 – shawGate

関連する問題