更新Quartz.net cron触发器不会在特定日期/日期执行每日触发器。

时间:2017-10-10 06:43:41

标签: c# quartz-scheduler 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 个答案:

答案 0 :(得分: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();