2012-04-05 5 views
2

Als Teil einer Eingabevalidierung Ich dachte, ob dies ein wirklich gültig Cron-Ausdruck, und wie wäre es ausgeführt:Quartz cron Expression von 0/0

0 0/0 * * * ? 

Quarz-Validierung liefert true

org.quartz.CronExpression.isValidExpression("0 0/0 * * * ?") 

Also, läuft das die ganze Zeit, nie, jede Stunde oder jede Minute ...?

Antwort

3

Nach der CronTrigger Tutorial Dokumentation:

  • / - verwendet Schritten angeben. Zum Beispiel bedeutet "0/15" in dem Sekundenfeld "die Sekunden 0, 15, 30 und 45". Und "5/15" in dem Sekundenfeld bedeutet "die Sekunden 5, 20, 35 und 50". Sie können auch '/' angeben, nachdem das '' Zeichen - in diesem Fall '' 0 'vor dem'/'entspricht. "1/3" im Feld "Tag des Monats" bedeutet "alle drei Tage ab dem ersten Tag des Monats".

Das bedeutet 0 nicht wirklich Sinn in diesem Zusammenhang macht. Allerdings CronExpression scheint es zu ignorieren und einfach verwerfen Sie diesen Wert, effektiv diese Ausdrücke als Behandlung:

0 0 * * * ? 

Wenn Sie neugierig sind, this is the code, die ungültige 0 Wert verwirft:

if ((incr == 0 || incr == -1) && val != ALL_SPEC_INT) { 
     if (val != -1) { 
      set.add(Integer.valueOf(val)); 
     } else { 
      set.add(NO_SPEC); 
     } 

     return; 
    } 
1

Weitere Informationen unter CronTrigger Dokumentation. Meine Vermutung ist, dass der Ausdruck 0 0/0 * * * ? bedeutet einmal jede Stunde (d. H. 0/0 bedeutet nicht jede Minute). Wenn Sie jedoch die ganze Zeit benötigen (d. H. Jede Sekunde), können Sie * * * * ? * verwenden.

7

Sie können das Ergebnis finden, indem TriggerUtils.computeFireTimesBetween() Verwendung:

try { 
     CronTriggerImpl cron = new CronTriggerImpl(); 

     cron.setStartTime(new Date()); 
     cron.setCronExpression("0 0/0 * * * ?"); 

     BaseCalendar calendar = new BaseCalendar(); 
     List<Date> result = TriggerUtils.computeFireTimesBetween(cron, calendar, new Date(),DateBuilder.futureDate(1, IntervalUnit.DAY)); 

     for (Date date : result) { 
      System.out.println(date); 
     } 

    } catch (ParseException e) { 
     e.printStackTrace(); 
    } 

und der Ausgang ist:

Thu Apr 05 18:00:00 CST 2012 
Thu Apr 05 19:00:00 CST 2012 
Thu Apr 05 20:00:00 CST 2012 
Thu Apr 05 21:00:00 CST 2012 
Thu Apr 05 22:00:00 CST 2012 
Thu Apr 05 23:00:00 CST 2012 
Fri Apr 06 00:00:00 CST 2012 
Fri Apr 06 01:00:00 CST 2012 
Fri Apr 06 02:00:00 CST 2012 
Fri Apr 06 03:00:00 CST 2012 
Fri Apr 06 04:00:00 CST 2012 
....................... 

So wird 0 0/0 * * * ? zu jeder Stunde bei 0 Minuten und 0 Sekunden laufen.