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 öffnenWarum 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
| Ausdruck | Erwartet | Tatsächlich | Lösung |
|---|---|---|---|
0 0 9 L * 6 | Letzter Tag, wenn Freitag | Konflikt: beide Tag-Felder gesetzt | ? in einem Tag-Feld verwenden |
0 0 9 1W * ? (1. ist Samstag) | Vorheriger Freitag | Montag, der 3. (kein Monatsübergang) | Mit Vorschau der nächsten Ausführungen verifizieren |
0 0 9 ? * 2#5 | Fünfter Montag monatlich | Nur Monate mit fünf Montagen | Ausführungszählung-Monitoring hinzufügen |
0 0 9 LW * ? im Februar | Letzter Werktag | 26., 27. oder 28. je nach Jahr | Zeitzonenbewusste 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.
| Anforderung | Zeichen | Feld | Beispiel |
|---|---|---|---|
| Am letzten Tag jedes Monats ausführen | L | Tag-des-Monats | 0 0 18 L * ? |
| N Tage vor Monatsende ausführen | L-N | Tag-des-Monats | 0 0 18 L-3 * ? |
| Am letzten bestimmten Wochentag ausführen | nL | Wochentag | 0 0 9 ? * 6L |
| Am nächsten Werktag zu einem Datum ausführen | W | Tag-des-Monats | 0 0 9 15W * ? |
| Am letzten Geschäftstag des Monats ausführen | LW | Tag-des-Monats | 0 0 17 LW * ? |
| Am N-ten Wochentag des Monats ausführen | # | Wochentag | 0 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üfung | Warum es wichtig ist | Bestehkriterium |
|---|---|---|
| Fehlerfrei parsen | Bestätigt syntaktische Gültigkeit | Keine Parser-Ausnahmen |
| Nächste 10 Ausführungen prüfen | Zeigt Monatsgrenz-Überraschungen auf | Alle Daten entsprechen der Absicht |
| Zeitzonen-Ausrichtung verifizieren | Server- vs. Geschäfts-Zeitzonen-Konflikte | Ausführungen passen zur Zielzeitzone |
?-Platzierung bestätigen | Beide Tag-Felder aktiv ist undefiniert | Ein Tag-Feld enthält ? |
| Auf stille Übersprünge prüfen | #5 kann < 12 Mal/Jahr auslösen | Jä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.