2011-08-16 8 views
1

私のサービスは、最初の火とそれが仕事だ実行するように私のトリガーを起動したときだから私は基本的にしたい、一度解雇して、毎週のスケジュールにすぐに毎週トリガーを発射することができます。

Trigger trigger = TriggerUtils.MakeWeeklyTrigger(
    "TriggerName", 
    dayOfweek, 
    timeOfDay.Hours, 
    timeOfDay.Minutes); 

を行くために毎週のトリガーを使用することが可能である場合、私は疑問に思って。その後、ユーザー設定に基づいて週単位で作業したいと考えています(最初のユーザーが月曜日の午前5時に設定された後)。

答えて

3

1つのジョブに複数のトリガーを関連付けることができます。一つは、すぐに一度だけ火なり、もう一方は毎週発生します:

var jobDetail = new JobDetail("MyJob", "MyGroup", typeof(T)); 

// run in ten seconds, only once. 
var once = new SimpleTrigger("Once", 
          null, 
          DateTime.UtcNow.AddSeconds(10), 
          null, 
          0, 
          TimeSpan.Zero); 

// run weekly, start in 5 minutes to give 'once' trigger some time to run 
Trigger weekly = TriggerUtils.MakeWeeklyTrigger(
    "Weekly", 
    dayOfweek, 
    timeOfDay.Hours, 
    timeOfDay.Minutes); 
weekly.StartTimeUtc = DateTime.UtcNow.Add(TimeSpan.FromMinutes(5)); 

once.JobName = jobDetail.Name; 
weekly.JobGroup = jobDetail.Group; 
once.JobName = jobDetail.Name; 
weekly.JobGroup = jobDetail.Group; 

_quartzScheduler.ScheduleJob(jobDetail, once); 
_quartzScheduler.ScheduleJob(weekly); 

それとも、すぐにトリガーをスケジュールすることができ、それが毎週に再スケジュール発射したとき:

private static volatile Boolean firstRun = false; 

public void Execute(JobExecutionContext context) { 
    if(firstRun) { 
     Trigger weekly = TriggerUtils.MakeWeeklyTrigger(
      "Weekly", 
      dayOfweek, 
      timeOfDay.Hours, 
      timeOfDay.Minutes); 

     context.Scheduler.RescheduleJob("Once", "MyGroup", weekly); 
     firstRun = false; 
    } 
} 

別のオプションは、ちょうどあなたのコードを実行することですクォーツを使わずに始動してください。ちょうどThreadPoolを使用してください。そして、Quartzに毎週スケジュールだけをさせてください。これは、あなたのコードがQuartzに依存していない場合に可能です。これは一般的には良い考えです。

+0

ちょうど2トリガーを作成せずに方法があるかもしれないと思った。私が一度トリガをテストしていたとき、私はそれが実際に2回実行されたことを発見しました。 – chobo2

+0

@ chobo2:答えの繰り返し時間パラメータは1に等しいです。複数回起動しましたか?それとも別の引き金でしたか?どのような例を使用していましたか? – Dmitry

+0

@ドミトリー - それぞれ同じ名前の同じトリガーでした。これは私が石英のドキュメントから使用したものである - SimpleTriggerトリガー=新SimpleTrigger( "myTrigger"、 ヌル、 DateTime.UtcNow.AddSeconds(10)、 ヌル、 0、 TimeSpan.Zero)。 – chobo2

関連する問題