2017-08-23 2 views
0

私はQuartzをクラスタ内で実行していますので、定期的にジョブを実行しています。ジョブはあるマシンで開始され、他のジョブは次の実行時間まで保持されます。クラスタ環境で既に開始されているクォーラム遅延ジョブはありません

私が今したいのは、前の呼び出しがまだ完了していなければ、ジョブの呼び出しを遅らせることです。

10:00 - instance invocation#1 
10:06 - invocation#1 finished 
10:10 - instance invocation#2 
10:13 - invocation#2 finished 
10:20 - instance invocation#3 
10:31 - invocation#3 finished // took longer than expected 
10:31 - instance invocation#4 // start delayed 
10:35 - invocation#4 finished 

でも、これは許容可能である:例えば

10:00 - instance invocation#1 
10:06 - invocation#1 finished 
10:10 - instance invocation#2 
10:13 - invocation#2 finished 
10:20 - instance invocation#3 
10:31 - invocation#3 finished // took longer than expected 
10:40 - instance invocation#4 // waits for next timed invocation 
10:44 - invocation#4 finished 

私は、トリガーのようにcron式を使用していますし、それは各10分(0 0/10 * * *)一度トリガされます。

答えて

1

@DisallowConcurrentExecutionであなたの仕事に注釈をつけてください。

+0

この注釈を読んでいる限り、同じノード上でジョブを実行することはできません。私の懸念は、クラスタ環境での実行を遅らせることです。 –

+0

binoternaryが正しい。 @DisallowConcurrentExecutionはそのトリックを行います。特定の時点で、このジョブの1つのインスタンスだけが実行されます。 – Srinivas

関連する問題