代码之家  ›  专栏  ›  技术社区  ›  Roshan

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

  •  1
  • Roshan  · 技术社区  · 7 年前

    我有cron触发器,它每天在一天中的特定时间触发,我必须更新该触发器,这样我就不希望该触发器在特定日期执行。

    例如,我有每天执行的触发器,我必须在该触发器不应执行的日期(2017年10月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 回复  |  直到 7 年前
        1
  •  1
  •   yorah    7 年前

    你应该使用 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();