Das Quartz-Cron-Format
Ein Quartz-Ausdruck hat sechs oder sieben Felder: Sekunden, Minuten, Stunden, Tag im Monat, Monat, Wochentag und optional das Jahr. 0 0 12 ? * MON-FRI etwa feuert werktags um 12 Uhr. Wochentage werden von 1 (Sonntag) bis 7 (Samstag) gezählt, englische Namen wie MON oder FRI sind auch in Bereichen erlaubt.
Die Fragezeichen-Regel
Quartz erlaubt nicht, Tag im Monat und Wochentag gleichzeitig einzuschränken. Genau eines der beiden Felder muss „?“ enthalten, was „kein bestimmter Wert“ bedeutet. 0 0 12 * * MON ist daher ungültig; richtig ist 0 0 12 ? * MON. Der Erklärer weist sofort darauf hin.
Sonderzeichen L, W und #
L steht für „letzter“: L im Feld Tag im Monat ist der letzte Tag des Monats, L-3 drei Tage davor, und 6L im Wochentagsfeld ist der letzte Freitag. W sucht den nächstgelegenen Werktag zu einem Datum, ohne den Monat zu verlassen: 15W feuert am Werktag, der dem 15. am nächsten liegt, LW ist der letzte Werktag des Monats. Die Raute wählt den n-ten Wochentag: 6#3 ist der dritte Freitag.
Quartz in der Praxis
Im Java-Code hängt ein Quartz-Ausdruck an einem Trigger, etwa TriggerBuilder.newTrigger().withSchedule(CronScheduleBuilder.cronSchedule("0 0 12 ? * MON-FRI").inTimeZone(TimeZone.getTimeZone("Europe/Berlin"))). Ohne inTimeZone gilt die Standardzone der JVM. Misfire-Anweisungen legen fest, was passiert, wenn der Scheduler zum geplanten Zeitpunkt nicht lief: sofort einmal nachholen oder zum nächsten Termin springen.
Häufige Fragen
- Worin unterscheidet sich Quartz-Cron von Unix-Cron?
- Quartz stellt ein Sekundenfeld voran und erlaubt ein Jahr am Ende, zählt Wochentage ab 1 = Sonntag, verlangt „?“ in einem Tagesfeld und unterstützt L, W und #.
- Kann ich einen Quartz-Ausdruck in crontab umwandeln?
- Ja, sofern die Sekunden 0 sind, kein Jahr gesetzt ist und weder L, W noch # vorkommen. Der Konverter zeigt das crontab-Äquivalent oder erklärt, warum es keines gibt.
- Was bedeutet 0 0/5 * * * ?
- Er feuert alle fünf Minuten in Sekunde 0, beginnend bei Minute 0 jeder Stunde, jeden Tag.
- Ist Springs @Scheduled-Cron dasselbe wie Quartz?
- Sehr ähnlich, aber Spring zählt Sonntag als 0 oder 7, hat kein Jahresfeld und verlangt kein „?“. Für Spring-Ausdrücke gibt es die Spring-Seite.