2013-06-25 4 views
3

Я использую Quartz.NET для делать каждый день задач в определенный час, и это мой код:Расписание задача запускать каждый день в определенное время с Quartz.NET

public class TestSchedule : ISchedule 
    { 
     public void Run() 
     { 

      DateTimeOffset startTime = DateBuilder.FutureDate(2, IntervalUnit.Second); 

      IJobDetail job = JobBuilder.Create<HelloJob>() 
             .WithIdentity("job1") 
             .Build(); 

      ITrigger trigger = TriggerBuilder.Create() 
              .WithIdentity("trigger1") 
              .StartAt(startTime) 
              .WithDailyTimeIntervalSchedule(x => x.OnEveryDay().StartingDailyAt(new TimeOfDay(7, 0)).WithRepeatCount(0)) 
              .Build(); 

      ISchedulerFactory sf = new StdSchedulerFactory(); 
      IScheduler sc = sf.GetScheduler(); 
      sc.ScheduleJob(job, trigger); 

      sc.Start(); 
     } 
    } 

мой код работает , но проблема в том, что работает только один раз (кажется, что это потому, что WithRepeatCount(0)) теперь, как можно сказать, что они работают каждый день в 7 часов?
PS: Я не хочу использовать CronTrigger для этого.

спасибо вашей посоветуйте

ответ

3

DailyTimeIntervalTriggerImpl поддерживают только RepeatCount.

Этот триггер также поддерживает функцию «repeatCount», чтобы закончить спусковой крючок. Время срабатывания после определенного количества отсчетов достигнуто. Так же, как SimpleTrigger, установка repeatCount = 0 означает, что триггер срабатывает только ! Установив любое положительное число, триггер повторит подсчет + 1 раз. В отличие от SimpleTrigger, значение по умолчанию repeatCount от для этого триггера устанавливается вместо REPEAT_INDEFINITELY вместо 0.

Выражения Cron красивы и имеются грузы tools, которые могут помочь вам в достижении того, что вы ищете.

Другой альтернативой было бы использовать SimpleTriggerImpl и установить интервал каждые 24 часа:

ITrigger trigger = TriggerBuilder.Create() 
     .WithIdentity("trigger1") 
     .StartAt(startTime) 
     .WithSimpleSchedule(x => x.RepeatForever().WithIntervalInHours(24)) 
     .Build(); 
+1

Другим решением было бы '.EndingDailyAfterCount (1)' вместо '.WithIntervalInHours (24)'. Таким образом, вы не столкнетесь с проблемами, связанными с DST (летнее время). – Christian