2017-10-10 17 views
1

私はその日の特定の時刻に毎日発生するcronトリガーを持っています。そのトリガーを更新して、そのトリガーを特定の日付に実行したくないようにしなければなりません。Quartz.netのcronトリガーを、特定の日付/日に実行しないように更新します。

例えば、私は毎日毎日実行する引き金を持っている、私は日付を渡す必要があります(3108年2月31日)この日にこのトリガーは実行しないでください。

は、私は、この特定の日付にジョブを実行しないようにするために、カレンダーを更新するための任意の方法を見つけていないコード

var calendar = SCSScheduler.Scheduler.GetCalendar(id); 
CronCalendar cronCal = new CronCalendar(calendar,cronExceptionSchedule); 
       SCSScheduler.Scheduler.AddCalendar(id, cronCal, true, true); 
    var newTrigger = tb.WithCronSchedule(cronSchedule) 
        .StartAt(DateTime.UtcNow) 
        .ForJob(id) 
        .ModifiedByCalendar(id) 
        .Build(); 

      SCSScheduler.Scheduler.RescheduleJob(key, newTrigger); 

下回ってみました。

答えて

1

作成するトリガーから完全な日を除外するために使用されるHolidayCalendarクラスを使用する必要があります。

これは実際には非常によくdocumentation(石英3.0beta1のコード)に記載されている:

HolidayCalendar cal = new HolidayCalendar(); 
cal.AddExcludedDate(new DateTime(2017, 10, 31)); 

await sched.AddCalendar("myHolidays", cal, false, false); 

ITrigger t = TriggerBuilder.Create() 
    .WithIdentity("myTrigger") 
    .ForJob("myJob") 
    .WithSchedule(CronScheduleBuilder.DailyAtHourAndMinute(9, 30)) // execute job daily at 9:30 
    .ModifiedByCalendar("myHolidays") // but not on holidays 
    .Build();