2012-01-13 13 views
0

時間間隔に基づいていないクォーツスケジューリングを使用したいが、ジョブが完了した後にジョブのスケジュールを変更したい。仕事は1分、2分などで完了するかもしれませんが、1分(またはx)分後に実行するように再スケジューリングする必要があります。クォーツを使用したワンショットジョブの再スケジューリング

私はすでにこの方法でRescheduleを使ってみましたが、ジョブは失敗しました。初めて

スケジューリング:

Trigger alertJobTrigger = new SimpleTrigger("alertJobTrigger", 
              "triggerGroup1", 
              DateTime.UtcNow.AddSeconds(60), 
              null, 
              0, 
              TimeSpan.Zero); 
scheduler.ScheduleJob(alertJobDetail, alertJobTrigger); 

は、ジョブの完了後に同じジョブを再スケジュールしようとすると:

Trigger trigger = Global.scheduler.GetTrigger("alertJobTrigger", 
               "triggerGroup1"); 

Trigger newTrigger = new SimpleTrigger("alertJobTrigger", 
             "triggerGroup1", 
             trigger.JobName, 
             trigger.JobGroup, 
             DateTime.UtcNow.AddSeconds(60), 
             null, 
             0, 
             TimeSpan.Zero);  

Global.scheduler.RescheduleJob(trigger.JobName, trigger.JobGroup, newTrigger); 
+0

。それはReschedule( "alertJobTrigger"、 "triggerGroup1"、...)でなければなりません。 –

答えて

0

あなたはと繰り返し間隔と等しいと仕事のスケジュールを変更する必要がある場合ジョブの実行時間を指定すると、トリガーに指示する必要があります。

そうでない場合は、同じ期間(繰り返し)実行されたジョブだけを繰り返す必要がある場合は、repeatCount = -1repeatInterval = TimeSpan.FromSeconds(..)を指定できます。また、同じジョブが複数回実行されないようにするには、ジョブの実行にrepeatIntervalより時間がかかる場合は、ジョブの先頭に[DisallowConcurrentExecution]アトリビュートを使用してください。

0

新しいトリガーを作成しないでください。再スケジュール中に同じトリガーを使用します。 これは動作するはずです:私は再スケジュールのトリガー名とトリガーグループでミスを犯した

Trigger trigger = Global.scheduler.GetTrigger("alertJobTrigger","triggerGroup1"); 

trigger.set(); //set whichever values you want. 

Global.scheduler.RescheduleJob(trigger.JobName, trigger.JobGroup, trigger); 
+0

私は上記の答えにあなたが考えているquartz.netのバージョンを知っているかもしれません。 –

関連する問題