9

私がはっきりしていない何か。1 日を通してランダムにスケジュールされたジョブがあり、各ジョブの実行に 30 分かかるとします。これらのジョブが 5 つ実行されていて、Tomcat が強制終了されたとします。アプリケーションで Tomcat を起動するとジョブが再起動しますか? または、現在実行中のジョブが既に起動されているために失われますか?

4

2 に答える 2

17

簡単な回答、デフォルトでは、現在実行中のジョブは起動されたと見なされ、回復されません

..ただし、ジョブ (JobDetail) をビルドするときにrequestRecoveryプロパティを設定して、「ハードシャットダウン」とも呼ばれるクラッシュの場合に実行中のジョブを回復するように Quartz に指示できます。

ページの下部にある公式ドキュメントを引用します。

RequestsRecovery - ジョブが「リカバリを要求」し、スケジューラの「ハード シャットダウン」中に実行されている場合 (つまり、実行中のプロセスがクラッシュしたり、マシンがシャットダウンされたりした場合)、再実行されます。スケジューラが再起動されたとき。この場合、JobExecutionContext.isRecovering() メソッドは true を返します。

したがって、たとえば次のことができます。

import static org.quartz.JobBuilder.*;

...

JobDetail job = newJob(MyJob.class)
           .withIdentity("myJob", "group1")
           .requestRecovery(true) //This is the guy!
           .build();

...
于 2013-10-02T21:09:33.910 に答える
0

Tomcat はあなたの仕事を気にしません。Web アプリケーションがシャットダウンされたときにジョブを正しく終了するのはあなたの仕事です。

于 2013-10-02T16:56:39.423 に答える