2017-10-10 5 views
1

Ich habe Cron-Trigger, die täglich zu bestimmten Zeitpunkt des Tages Feuer, ich muss diesen Auslöser aktualisieren, so dass ich nicht möchte, dass Trigger an einem bestimmten Datum ausgeführt wird.Update Quartz.net Cron-Trigger nicht an einem bestimmten Datum/Daten für Tagesauslöser ausführen.

z. Ich habe Trigger, die täglich an jedem Tag ausführen, ich muss ein Datum übergeben (31Oct2017) An diesem Datum sollte dieser Trigger nicht ausgeführt werden.

Ich habe versucht, unter Code

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

Ich finde keine Methode Kalender zu aktualisieren, um nicht Arbeit für diesen besonderen Zeitpunkt auszuführen.

Antwort

1

Sie sollten die Klasse HolidayCalendar verwenden, mit der ganze Tage von den Triggern ausgeschlossen werden, die Sie erstellen.

Dies ist eigentlich ganz gut in dem documentation (Code für Quarz 3.0beta1) beschrieben:

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