Zum Hauptinhalt springen

Verstehen der Cron-Syntax in Spring's @Scheduled

Spring Cron Scheduling
Übersetzt von
Namastecode
Inhaltsverzeichnis

1. Einführung

In diesem Tutorial lernen wir, wie wir die @Scheduled-Annotation in Spring mit Cron-Ausdrücken verwenden können.

Der in Spring verwendete Cron-Ausdruck unterscheidet sich geringfügig vom Unix-Cron-Ausdruck, da er ein zusätzliches Feld erfordert. Dies könnte einige von uns hinsichtlich der Verwendung des sechsten Feldes verwirren.

Lassen Sie uns zunächst die verschiedenen Cron-Ausdruckstypen verstehen und dann lernen, wie man die @Scheduled-Annotation in Spring konfiguriert.

2. Standard-Cron-Ausdrucksformat

In Unix-basierten Systemen und den meisten Online-Tools für Cron-Ausdrücke bestehen Cron-Ausdrücke typischerweise aus fünf Feldern, die durch Leerzeichen getrennt sind:

 ┌───────────── minute (0 - 59)
 │ ┌───────────── hour (0 - 23) 
 │ │ ┌───────────── day of the month (1 - 31)
 │ │ │ ┌───────────── month (1 - 12) 
 │ │ │ │ ┌───────────── day of the week (0 - 6) (Sunday to Saturday; 7 is also Sunday)
 │ │ │ │ │
 │ │ │ │ │
 * * * * * command to execute

Jedes Feld repräsentiert eine bestimmte Zeiteinheit und kann Werte im Bereich in Klammern enthalten. Zum Beispiel können wir einen Cron-Ausdruck schreiben, um anzugeben, dass ein Job jeden Freitag um 18 Uhr ausgeführt werden soll:

0 18 * * 5

Hierbei stehen die Sterne für jeden Wert, sodass dieser Ausdruck den Job jeden Freitag um 18 Uhr ausführt.

Das Einfügen dieses Cron-Ausdrucks in @Scheduled wird unsere Spring-Anwendung nicht einmal starten, da ein anderes Format erforderlich ist. Schauen wir uns an, wie wir die @Scheduled-Annotation in Spring verwenden können.

3. Verwendung der @Scheduled Annotation in Spring

Um eine Aufgabe in einer Spring-Anwendung zu einer bestimmten Zeit oder in einem bestimmten Intervall auszuführen, können wir die @Scheduled-Annotation zusammen mit einem Cron-Ausdruck verwenden:

@Scheduled(cron = "0 0 18 * * 5")
public void scheduledTask() {
    // Task logic here
}

Ähnlich wird der Cron-Ausdruck in diesem Beispiel die Methode scheduledTask() jeden Freitag um 18 Uhr ausführen. Wir können sehen, dass das Format dem Standard-Cron-Ausdruck ähnlich ist, aber es erfordert ein zusätzliches Feld.

Also erweitert Spring das Standardformat, indem es zu Beginn einen sechsten Parameter hinzufügt, der Sekunden darstellt:

 ┌───────────── second (0 - 59)
 │ ┌───────────── minute (0 - 59)
 │ │ ┌───────────── hour (0 - 23)
 │ │ │ ┌───────────── day of the month (1 - 31)
 │ │ │ │ ┌───────────── month (1 - 12)
 │ │ │ │ │ ┌───────────── day of the week (0 - 7) (0 and 7 both represent Sunday)
 │ │ │ │ │ │
 * * * * * *

Ein feiner abgestufter Zugriff auf die Aufgabenplanung ermöglicht es, cron-Jobs bis auf die Sekundebene zu steuern. Es ist jedoch wichtig zu beachten, dass die Systemlast die tatsächliche Ausführungszeit der geplanten Aufgaben stark beeinflussen kann.

Wir müssen beachten, dass um Scheduling in Spring zu aktivieren, wir die @EnableScheduling Annotation zu unserer Konfigurationsklasse hinzufügen müssen.

Cron-Ausdrücke sind sehr flexibel und werden noch mächtiger, wenn sie mit Sonderzeichen kombiniert werden. Lassen Sie uns einen Überblick über diese Sonderzeichen verschaffen.

4. Sonderzeichen in Cron-Ausdrücken

Genau wie in der standardmäßigen Cron-Syntax unterstützen Spring Cron-Ausdrücke Sonderzeichen, um mehr Flexibilität zu bieten.

Wir können das Sternchen * verwenden, um alle möglichen Werte für ein Feld darzustellen. Alternativ können wir ein Fragezeichen ? nutzen, um keinen spezifischen Wert darzustellen, was typischerweise für Tag des Monats oder Tag der Woche verwendet wird.

Zum Beispiel, um eine Aufgabe zu Beginn jeder Stunde an jedem Tag der Woche auszuführen:

@Scheduled(cron = "0 0 * * * ?")

Wir können auch mehrere Werte mit einem Komma oder einen Wertebereich mit einem Bindestrich - angeben. Zusätzlich können wir den Schrägstrich / verwenden, um Inkremente anzugeben.

Beispielsweise, um eine Aufgabe alle 2 Stunden an Samstagen und Sonntagen zwischen dem ersten und dem 15. Tag des Monats auszuführen:

@Scheduled(cron = "0 0 0/2 1-15 * 6,7")

Wie wir aus dem letzten Beispiel sehen können, können wir mehrere Sonderzeichen kombinieren, um komplexe Planungsmuster zu erstellen.

5. Fazit

In diesem Artikel haben wir über Cron-Ausdrücke in Spring gelernt und wie man sie mit der @Scheduled-Annotation verwendet. Zuerst haben wir uns das standardmäßige Unix-Cron-Ausdrucksformat angesehen und dann gesehen, wie Spring es durch Hinzufügen eines sechsten Parameters für Sekunden erweitert. Schließlich haben wir erforscht, wie man Sonderzeichen verwendet, um komplexe Zeitplanmuster zu erstellen.

Verwandte Artikel

Werte aus einer Properties-Datei in Spring abrufen
Spring Properties Basics
Konfigurieren des Ports für eine Spring Boot-Anwendung
Spring Basics
Testcontainers in Spring Boot Integrationstests
Spring Testcontainers Testing