2017-10-10 59 views
1

我有cron触发器每天在特定时间触发,我必须更新触发器,以便我不希望触发器在特定日期执行。更新Quartz.net cron触发器不会在特定日期/日期执行日常触发。

例如。我有每天执行的触发器,我必须通过一个日期(31Oct2017)在这个日期,这个触发器不应该执行。

我尝试下面的代码

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();