Zum Inhalt springen
CronExplain

Spring-Cron-Ausdrücke erklärt

Springs Annotation @Scheduled(cron = "...") nutzt ein Cron-Format mit sechs Feldern und Sekunden vorne. Füge einen Spring-Ausdruck ein, um ihn in Klartext zu lesen und seine nächsten Läufe in der Zeitzone deines Servers zu prüfen.

Bedeutung

Spring @Scheduled: sechs Felder mit Sekunden vorne, 0 oder 7 = Sonntag; unterstützt L, W, # und Makros wie @daily.

✓ Gültig · Bedeutung

Um 09:00, Montag bis Freitag

Vorlagen

Nächste 10 Ausführungen

#In UTCDeine Ortszeit
1——
2——
3——
4——
5——
6——
7——
8——
9——
10——

Derselbe Zeitplan in anderen Dialekten

  • Standard-crontab0 9 * * 1-5
  • Quartz0 0 9 ? * MON-FRI
  • AWS EventBridgecron(0 9 ? * MON-FRI *)EventBridge-Regeln verwenden UTC.

Visueller Editor

Wähle Werte pro Feld. Der Editor erzeugt einen Standard-Ausdruck mit fünf Feldern, der beim Übernehmen in den gewählten Dialekt umgewandelt wird.

Minute
Stunde
Tag im Monat
Monat
Wochentag
0 9 * * 1-5

Das Spring-Cron-Format

Ein Spring-Ausdruck hat sechs Felder: Sekunde, Minute, Stunde, Tag im Monat, Monat und Wochentag, zum Beispiel 0 0 9 * * MON-FRI für werktags 09:00. Sonntag kann als 0, 7 oder SUN geschrieben werden. Seit Spring Framework 5.3 versteht der Parser auch L, W und # in den Tagesfeldern sowie Makros wie @hourly und @daily.

Zeitzone von @Scheduled

Standardmäßig werden Ausdrücke in der Standard-Zeitzone des Servers ausgewertet. Setze das Attribut zone, etwa @Scheduled(cron = "0 0 2 * * *", zone = "Europe/Berlin"), damit der Zeitplan unabhängig vom Host ist. Wähle dieselbe Zone im Tool, um die Läufe zu prüfen. Gerade bei Containern, die meist in UTC laufen, vermeidet das Überraschungen bei der Zeitumstellung.

Spring vs. Quartz

Spring-Ausdrücke ähneln denen von Quartz, unterscheiden sich aber im Detail: Es gibt kein Jahresfeld, Sonntag ist 0 statt 1, und „?“ ist erlaubt, aber nicht nötig. Sind beide Tagesfelder eingeschränkt, müssen bei Spring beide passen. Der Konverter zeigt das Quartz-Äquivalent, wenn es eines gibt.

Scheduling aktivieren

Cron-Methoden laufen nur, wenn Scheduling mit @EnableScheduling eingeschaltet ist. Standardmäßig nutzt Spring einen einzigen Thread, ein langer Task verzögert also alle anderen; konfiguriere bei mehreren Jobs einen ThreadPoolTaskScheduler oder spring.task.scheduling.pool.size. Im Cluster feuert jede Instanz denselben Cron – nutze eine Sperre wie ShedLock, wenn ein Job nur einmal laufen darf.

Häufige Fragen

Warum verlangt Spring sechs Felder?
Spring braucht ein Sekundenfeld. Stelle einem crontab-Ausdruck mit fünf Feldern eine 0 voran: 0 */5 * * * * läuft alle fünf Minuten.
Wie deaktiviere ich einen @Scheduled-Cron-Job?
Mit dem Sonderwert "-" (Scheduled.CRON_DISABLED), meist über einen Property-Platzhalter.
Unterstützt Spring den letzten Tag des Monats?
Ja, seit 5.3: 0 0 0 L * * läuft um Mitternacht am letzten Tag jedes Monats.
Kann ich den Cron-Ausdruck aus der Konfiguration lesen?
Ja, zum Beispiel mit @Scheduled(cron = "${jobs.cleanup.cron}"), damit sich der Zeitplan je Umgebung ändern lässt.