Cronwise

Quartz-Sonderzeichen: L, W und # erklärt

Detaillierte Anleitung auf Token-Ebene für die Quartz-Operatoren L, W und #, damit Sie präzise Zeitpläne ohne Laufzeitüberraschungen erstellen können.

Quartz-Generator öffnen

Warum Quartz-Sonderzeichen wichtig sind

Die meisten Cron-Fehler entstehen vor der Bereitstellung, wenn Planungsabsicht und Syntax auseinandergehen. Standard-Fünf-Feld-Cron deckt Minuten, Stunden, Tag-des-Monats, Monat und Wochentag ab. Quartz erweitert dies um ein Sekundenfeld, ein Jahresfeld und drei Sonderzeichen – L, W und # –, die eine Planungspräzision ermöglichen, die Standard-Cron nicht erreichen kann.

Diese Zeichen verhalten sich je nach Feld unterschiedlich, und kleine Missverständnisse kaskadieren in Zeitpläne, die am falschen Tag auslösen oder Ausführungen ganz überspringen. Dieser Artikel erklärt jedes Zeichen mit praktischen Beispielen, Validierungsprüfungen und klaren nächsten Aktionen, die Sie im Cronwise Quartz-Generator durchführen können.

Das L-Zeichen: Letzter Tag und letzter Wochentag

L steht für „letzter“ und ist in zwei Feldern gültig: Tag-des-Monats und Wochentag. Seine Bedeutung ändert sich je nachdem, wo Sie es platzieren.

L im Tag-des-Monats

Allein verwendet bedeutet L den letzten Tag des Monats. Der Ausdruck 0 0 18 L * ? wird um 18:00 Uhr am letzten Tag jedes Monats ausgelöst – ob das der 28., 29., 30. oder 31. ist. Sie müssen Monatslängen nie fest codieren.

Sie können L mit einem negativen Offset kombinieren. L-3 bedeutet drei Tage vor dem letzten Tag. In einem 31-Tage-Monat ergibt das den 28.; im Februar eines Nicht-Schaltjahres den 25. Dies ist nützlich für Abrechnungsfristen.

L im Wochentag

Im Wochentag-Feld kombinieren Sie L mit einer Wochentagnummer: 6L bedeutet den letzten Freitag des Monats. Der Ausdruck 0 0 9 ? * 6L wird um 9:00 Uhr am letzten Freitag jedes Monats ausgelöst – nützlich für die Gehaltsabrechnung oder Monatsendberichte, die auf einen bestimmten Wochentag fallen müssen.

Das W-Zeichen: Nächster Werktag

W ist nur im Feld Tag-des-Monats gültig. Es wählt den nächsten Werktag (Montag bis Freitag) zum angegebenen Datum. Schreiben Sie 15W, um „den Werktag zu meinen, der dem 15. am nächsten liegt."

Wie W aufgelöst wird

Wenn der 15. auf einen Samstag fällt, verschiebt sich der Zeitplan auf Freitag, den 14. Wenn er auf einen Sonntag fällt, verschiebt er sich auf Montag, den 16. Die Auflösung überschreitet nie Monatsgrenzen: Wenn der 1. ein Samstag ist, ergibt 1W Montag, den 3., nicht den vorherigen Freitag.

Kombination von L und W

Quartz erlaubt die Kombination LW, was „der letzte Werktag des Monats" bedeutet. Dies ist ideal für Monatsend-Finanzabschlüsse, die an einem Geschäftstag ausgeführt werden müssen. Wenn der letzte Tag ein Samstag ist, ergibt LW Freitag. Beachten Sie, dass W nicht mit einer Liste oder einem Bereich kombiniert werden kann – Ausdrücke wie 1W,15W sind ungültig.

Das #-Zeichen: N-ter Wochentag des Monats

# ist nur im Feld Wochentag gültig und gibt das N-te Vorkommen eines Wochentags innerhalb eines Monats an. Die Syntax lautet Tag#N, wobei Tag die Wochentagnummer (1–7, Sonntag bis Samstag) und N das Vorkommen (1–5) ist.

Praktische Beispiele

0 0 10 ? * 2#1 wird um 10:00 Uhr am ersten Montag jedes Monats ausgelöst. 0 0 14 ? * 6#3 wird um 14:00 Uhr am dritten Freitag ausgelöst. Diese Muster ersetzen fragile Workarounds, die auf Tag-des-Monats-Bereichen und bedingter Logik basieren.

Wenn N die tatsächlichen Vorkommen übersteigt

Wenn Sie 2#5 angeben (den fünften Montag), wird der Zeitplan in Monaten mit nur vier Montagen nicht ausgelöst. Quartz behandelt dies als Nicht-Treffer, nicht als Fehler – ein stilles Überspringen, das Ausführungszählung-Monitoring unerlässlich macht.

Das #-Zeichen kann nicht im Tag-des-Monats-Feld erscheinen und kann nicht mit Listen, Bereichen oder Inkrementen kombiniert werden. Jedes Wochentag-Feld akzeptiert höchstens eine #-Angabe.

Grenzverhalten und Fehlermodi

Subtile Fehler mit diesen Zeichen lösen selten Validierungsfehler aus, weichen aber stillschweigend von der Absicht ab.

Häufige Stolperfallen

AusdruckErwartetTatsächlichLösung
0 0 9 L * 6Letzter Tag, wenn FreitagKonflikt: beide Tag-Felder gesetzt? in einem Tag-Feld verwenden
0 0 9 1W * ? (1. ist Samstag)Vorheriger FreitagMontag, der 3. (kein Monatsübergang)Mit Vorschau der nächsten Ausführungen verifizieren
0 0 9 ? * 2#5Fünfter Montag monatlichNur Monate mit fünf MontagenAusführungszählung-Monitoring hinzufügen
0 0 9 LW * ? im FebruarLetzter Werktag26., 27. oder 28. je nach JahrZeitzonenbewusste Vorschau prüfen

Der gefährlichste Fehler ist die Angabe von Werten in sowohl Tag-des-Monats als auch Wochentag ohne ? als Platzhalter zu verwenden. Quartz erfordert, dass genau ein Tag-Feld ? enthält. Es wegzulassen erzeugt einen Parse-Fehler oder undefiniertes Verhalten je nach Quartz-Version.

Entscheidungsrahmen: Das richtige Zeichen wählen

Jedes Sonderzeichen löst ein anderes Planungsproblem. Die Wahl des richtigen hängt davon ab, ob Ihr Zeitplan an ein Kalenderdatum, einen Wochentag oder eine relative Position innerhalb des Monats gebunden ist.

AnforderungZeichenFeldBeispiel
Am letzten Tag jedes Monats ausführenLTag-des-Monats0 0 18 L * ?
N Tage vor Monatsende ausführenL-NTag-des-Monats0 0 18 L-3 * ?
Am letzten bestimmten Wochentag ausführennLWochentag0 0 9 ? * 6L
Am nächsten Werktag zu einem Datum ausführenWTag-des-Monats0 0 9 15W * ?
Am letzten Geschäftstag des Monats ausführenLWTag-des-Monats0 0 17 LW * ?
Am N-ten Wochentag des Monats ausführen#Wochentag0 0 10 ? * 2#1

Wenn Ihre Anforderung rein datumsbasiert ist („der 15."), benötigen Sie überhaupt keine Sonderzeichen. Verwenden Sie W nur, wenn Geschäftstag-Ausrichtung erforderlich ist. Verwenden Sie # nur, wenn ein wiederkehrendes Wochentag-Vorkommen wichtiger ist als ein festes Datum. Und verwenden Sie L, wenn Monatsende-Semantik sich automatisch an variable Monatslängen anpassen muss.

Produktionshärtung: Prüfungen vor der Bereitstellung

Bevor ein Quartz-Zeitplan die Produktion erreicht, gehen Sie diese Verifizierungsschritte durch, um Grenzfälle zu erkennen, die statische Validierung nicht aufdecken kann.

Verifizierungscheckliste

PrüfungWarum es wichtig istBestehkriterium
Fehlerfrei parsenBestätigt syntaktische GültigkeitKeine Parser-Ausnahmen
Nächste 10 Ausführungen prüfenZeigt Monatsgrenz-Überraschungen aufAlle Daten entsprechen der Absicht
Zeitzonen-Ausrichtung verifizierenServer- vs. Geschäfts-Zeitzonen-KonflikteAusführungen passen zur Zielzeitzone
?-Platzierung bestätigenBeide Tag-Felder aktiv ist undefiniertEin Tag-Feld enthält ?
Auf stille Übersprünge prüfen#5 kann < 12 Mal/Jahr auslösenJährliche Anzahl dokumentiert

Die Cronwise-Vorschau der nächsten Ausführungen gibt die nächsten 10 Ausführungen in Ihrer ausgewählten Zeitzone zurück, sodass Sie diese Kriterien überprüfen können, ohne einen Testjob bereitzustellen. Wenn Ihr Team über Zeitzonen hinweg arbeitet, lesen Sie Cron-Zeitzonen erklärt für globale Teams für zusätzliche Anleitung.

Alles zusammenfügen

Die Quartz-Zeichen L, W und # geben Ihnen Planungsmöglichkeiten, die Standard-Cron nicht bieten kann. L passt sich an variable Monatslängen an, W richtet die Ausführung an Geschäftstagen aus, und # bindet Ausführungen an bestimmte Wochentag-Vorkommen. Korrekt verwendet eliminieren sie fragile Workarounds und machen die Planungsabsicht im Ausdruck selbst explizit.

Die Entscheidungsregeln sind unkompliziert. Verwenden Sie L für Monatsende-Logik. Verwenden Sie W, wenn Sie den nächsten Werktag benötigen. Verwenden Sie # für den N-ten Wochentag eines Monats. Platzieren Sie ? immer in dem Tag-Feld, das Sie nicht verwenden. Und verifizieren Sie immer mit einer Vorschau der nächsten Ausführungen vor der Bereitstellung.

Bereit, Ihren Quartz-Zeitplan zu erstellen oder zu validieren? Öffnen Sie den Cronwise Quartz-Generator, um Ausdrücke visuell zu erstellen, verständliche Erklärungen zu sehen und Ausführungszeiten in Ihrer Zielzeitzone vorzuschauen. Für weitere Cron-Planungsleitfäden und Vertiefungen durchsuchen Sie alle Cron-Artikel auf Cronwise.