2011-08-08 16 views
1

1つのジョブを停止して終了する時間をスケジュールするにはどうすればよいですか 実行タスクの開始からですか? たとえば、1時間後にタスクがまだ機能している場合、タスクは停止して削除されます。私はJavaでorg.quartz.Schedulerとorg.quartz.JobDetailで使用 実行中にorg.quartz.JobDetailを停止する時間を決定する方法は?

多くのおかげ

答えて

0

を(私は繰り返しタスクに意味するものではありません)あなたはorg.quartz.InterruptableJobインターフェイスに見たいと思うかもしれません(Jobを拡張する)とinterrupt()メソッドをスケジューラ上で実行します。

実際にワーカースレッドプール内のスレッドでThread.interrupt()を呼び出す場合は、org.quartz.spi.ThreadPoolの実装が必要になる可能性があります。

+0

ジョブを開始する前にタスクの存続時間を決定する方法と、停止時間の到着時にメソッドにコールしない方法はありますか? – cls

+0

もう1つのジョブを追加して、他のジョブを強制終了し、それに応じてスケジュールすることができます。 – Sathwick

0

この機能をジョブ内でコーディングすると、おそらくあなたのほうが簡単だと思います。

  1. ジョブは、停止する必要が正常に停止してその簡単な仕事を脇に設定すると、ジョブは、ジョブ
  2. 内から実行されているどのくらいの時間を追跡するために、そのは非常に簡単:私はいくつかの理由のためにこれを言いますそれはあなたの仕事は、そのがやって作品に進捗状況を伝えることができるかもしれ
  3. をやって、とされた場合、そのそれはキルタイム+ 10%か何かを超えて行くように行われているに近い
0
If you change your class to implement StatefulJob instead of Job, Quartz will take care of this for you. From the StatefulJob javadoc: 

stateful jobs are not allowed to execute concurrently, which means new triggers that occur before the completion of the execute(xx) method will be delayed. 

StatefulJob extends Job and does not add any new methods, so all you need to do to get the behaviour you want is change this: 

public class YourJob implements org.quartz.Job { 
    void execute(JobExecutionContext context) {/*implementation omitted*/} 
} 
To this: 

public class YourJob implements org.quartz.StatefulJob { 
    void execute(JobExecutionContext context) {/*implementation omitted*/} 
} 

Couple more options are here

関連する問題