2011-10-18 12 views
3

私はQuartzライブラリを使ってスケジュールされたジョブを持つWebアプリケーションを持っています。最近、私は仕事が解雇されたように見えなかった場合に遭遇しました。私はいくつかの読書を行い、明らかにジョブが例外をスローすると、Quartzスケジューラはジョブを再度実行しようとします。これは本当ですか?Quartzスケジュールされたジョブが起動しない - 未処理の例外がありますか?

いずれにしても、上記のステートメントが真であるという前提に基づいてトラブルシューティングを行いました。それでは、私は次のコードスニペットを持っているとしましょう:ここ

try { 
    method.invoke(object, params); 
} 
catch (ExceptionA ea) { 
    ea.printStackTrace(); 
} 
catch (ExceptionB eb) { 
    eb.printStackTrace(); 
} 
// and so on so forth, catching a bunch of specific Exceptions 

重要な点に注意することが例外自体がをキャッチされていないことです。

したがって、呼び出されたメソッドが処理されない例外をスローしたとします。

public void methodBeingInvoked() throws UnhandledException { 

ここではどうなりますか?

答えて

4

任意ジョブからスローされたは、Quartzによって捕捉され、JobExecutionExceptionでラップされ、リフレッシュされません。 JobRunShell#run

のソースコードを参照してください。これを矛盾するいくつかのdocumentation on the Quartz websiteがありますが、クォーツは1.8.x/2.0.xの/ 2.1.xのソースコードを見た後、ドキュメントはすべてのバージョンで間違っています。

ジョブの実行メソッドには、考えられるすべての例外を処理するtry-catchブロックが含まれている必要があります。

ジョブが例外をスローすると、通常はすぐに が実行されます(同じ例外が再びスローされます)。 ジョブが発生する可能性のあるすべての例外をキャッチし、 を処理し、それ自体または他のジョブを再スケジューリングするとよいでしょう。問題を回避する

関連する問題