web-dev-qa-db-ja.com

別のジョブが終了して停止したときにのみ開始するようにQUARTZJOBを設定するにはどうすればよいですか?

10分ごとに開始されるQUARTZJOBがあります。

JOBが10分以内に終了しない場合、次の10分で別のJOBが開始されます。

私が欲しいのは、次のJOB(10分ごと)は、前のJOBの実行が終了した場合にのみ開始する必要があるということです。それを行う方法はありますか?

15
victorio

Quartzドキュメント

@DisallowConcurrentExecutionは、特定のジョブ定義(特定のジョブクラスを参照)の複数のインスタンスを同時に実行しないようにQuartzに指示するJobクラスに追加できるアノテーションです。非常に慎重に選択されているため、そこにある文言に注意してください。前のセクションの例では、「SalesReportJob」にこのアノテーションがある場合、「SalesReportForJoe」のインスタンスは一度に1つしか実行できませんが、「SalesReportForMike」のインスタンスと同時に実行できます。制約は、ジョブクラスのインスタンスではなく、インスタンス定義(JobDetail)に基づいています。ただし、(Quartzの設計中に)クラス自体に注釈を付けることが決定されました。これは、クラスのコーディング方法に違いが生じることが多いためです。

SalesReportForMikeとSalesReportForJoeを同時に実行したくない場合は、スケジューラのThreadPoolサイズを1に設定できます。したがって、常に1つのジョブのみが実行されます。

StatefulJob もご覧ください

10
M.Faizal

DisallowConcurrentExecution アノテーションを見てください。これにより、同じジョブの複数のインスタンスが同時に実行されるのを防ぐことができます。

1
Martin