2012-04-04 5 views
0

Ich benutze folgenden Cron-Ausdruck, um einen Job an jedem Freitag zur angegebenen Uhrzeit auszuführen (in Beispiel unten ist es 1:13 PM).Quartz CronTrigger Ausführung von Jobs bei falschem Datum/Uhrzeit

0 13 13 ? * FRI 

So erwartetes Verhalten soll, wenn ich diesen Trigger jeden Tag andere dann Freitag initialisieren, dann sollte es nicht bis zum nächsten Freitag starten Ausführung. Aber was passiert in meinem Fall ist, selbst wenn ich diesen Trigger heute initialisiert habe (wie heute Mittwoch ist), beginnt es gerade, Jobs auszuführen.

Relevante Java Quelle:

CronTrigger cronTrigger = new CronTrigger("trigger_" + groupName, groupName, cronExpression); 
cronTrigger.setStartTime(startDate); //startDate = 1-Mar-2012 
cronTrigger.setEndTime(endDate);  //endDate = 30-Apr-2012 
+0

* Meinten Sie: '0 13 13? * FRI' *? –

+0

oh ja, ich kopierte es aus der falschen Datei tatsächlich – Waqas

Antwort

3

Ihre Ausgabe der Startzeit ist zu konfigurieren. startTime ist der Zeitpunkt, zu dem der Trigger ausgelöst werden soll. Da das Datum alt ist, führt dies zu einer Fehlzündung im Scheduler, und das Standardverhalten bewirkt, dass der Scheduler sofort erneut startet.

Entfernen Sie setStartTime, das Standardverhalten ist für StartTime auf die aktuelle Zeit festgelegt werden und die erste Auslösezeit wird die Übereinstimmung mit dem Cron-Trigger nach der Startzeit so an diesem Donnerstag sein.

Schnell kleiner Test mir zusammen durch, um zu überprüfen:

public class Test { 
    public static void main(String[] args) throws ParseException, SchedulerException { 
     String groupName = "group"; 
     String cronExpression = "0 13 13 ? * THUR"; 

     CronTrigger cronTrigger = new CronTrigger("trigger_" + groupName, groupName, cronExpression); 
     cronTrigger.setStartTime(new Date(0)); 
     Scheduler scheduler = StdSchedulerFactory.getDefaultScheduler(); 
     JobDetail detail = new JobDetail("testJob", groupName, TestJob.class); 
     scheduler.scheduleJob(detail, cronTrigger); 
     scheduler.start(); 
     try { 
      Thread.sleep(50001); 
     } catch (Exception ignore) { 
     } 

    } 

    public static class TestJob implements Job { 
     public void execute(JobExecutionContext context) throws JobExecutionException { 
      System.out.println("TEST"); 
     } 
    } 
} 

Wenn die setStartTime Nachricht meines Drucks Entfernen nicht ausgelöst. Mit ihm wird die Druckmeldung ausgelöst.

+2

Sie können auch die nächste Feuerzeit von 'CronTrigger.getNextFireTime()' testen, um mit Ihrem Cron-Ausdruck zu überprüfen. – nobeh