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.