2017-05-28 3 views
1

Ich habe zwei Aufgaben. Der erste sollte einmal pro Stunde ausgeführt werden, der zweite jeden Tag um 12:00 Uhr. Der Auslöser der ersten Aufgabe funktioniert gut, aber die zweite wird nur ausgelöst, wenn sie einige Minuten vor der Zielzeit erstellt wird. Was mache ich falsch?Quartz.net Trigger löst nicht

Die Konfiguration des ersten:

IJobDetail job = JobBuilder.Create<WatchJob>() 
    .WithIdentity("Job_1", "First") 
    .WithDescription("Job_1_First") 
    .UsingJobData("AppData", JsonConvert.SerializeObject("Job_1_First")) 
    .Build(); 

ITrigger trigger = TriggerBuilder.Create() 
    .WithIdentity("Trigger_1", "First") 
    .StartNow() 
    .WithSimpleSchedule(x => x 
    .WithIntervalInMinutes(1440) 
    .RepeatForever()) 
    .Build(); 

Und die zweite:

IJobDetail updateJob = JobBuilder.Create<UpdateJob>() 
     .WithIdentity("Job_1", "Second") 
     .WithDescription("Job_1_Second") 
     .UsingJobData("AppData", JsonConvert.SerializeObject("Job_1_Second")) 
     .Build(); 

    ITrigger updateTrigger = TriggerBuilder.Create() 
     .WithIdentity("Trigger_1", "Second") 
     .WithDailyTimeIntervalSchedule 
      (t => t 
       .WithIntervalInHours(24) 
       .OnEveryDay() 
       .StartingDailyAt(TimeOfDay.HourAndMinuteOfDay(12, 0)) 
      ) 
     .Build(); 

Scheduler Konfiguration:

<quartz> 
    <add key="quartz.scheduler.instanceName" value="Test" /> 
    <add key="quartz.threadPool.type" value="Quartz.Simpl.SimpleThreadPool, Quartz" /> 
    <add key="quartz.threadPool.threadCount" value="1" /> 
    <add key="quartz.threadPool.threadPriority" value="2" /> 
    <add key="quartz.jobStore.misfireThreshold" value="60000" /> 
    <add key="quartz.jobStore.type" value="Quartz.Simpl.RAMJobStore, Quartz" /> 
</quartz> 
+0

Welche Version von Quarz verwenden Sie? Ist es ein Asp.Net-Projekt? – Rabban

+0

@Rabban, ich benutze Quartz 2.4.1 in der Konsolenanwendung – iPhosgen

Antwort

0

Es scheint nichts falsch mit Ihrer Trigger-Definition zu sein. Aber Quarz (2.x) ist nicht so gut unter die Haube geschrieben und kann manchmal wirklich komisch wirken. Ihr zweiter Trigger ist ein CronTrigger und kann auf andere Weise definiert werden.

Dies funktioniert für mich:

ITrigger updateTrigger = TriggerBuilder.Create() 
    .WithIdentity("Trigger_1", "Second") 
    .WithSchedule(CronScheduleBuilder.DailyAtHourAndMinute(12, 0)) 
    // this line tells quartz to start the trigger immediately, you can remove it, if you don't want this behaviour 
    .StartAt(DateTime.Now.AddDays(-1)) 
    .Build(); 
+0

Danke. Es funktioniert wirklich. – iPhosgen