it-swarm.com.de

Frühlings-Cron-Ausdruck für jeden Tag 1: 01: morgens

Ich versuche, meinen Code nach einem festen Zeitplan ausführen zu lassen, der auf einem Spring-Cron-Ausdruck basiert. Ich möchte, dass der Code jeden Tag um 01.01 Uhr ausgeführt wird. Ich habe den folgenden Ausdruck ausprobiert, aber das hat nicht für mich ausgelöst. Was stimmt hier nicht mit der Syntax?

@Scheduled(cron = "0 1 1 ? * *")
public void resetCache() {
    // ...
}
162
d-man

Versuche es mit:

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

Nachfolgend finden Sie die Beispielmuster aus dem Frühjahrsforum:

* "0 0 * * * *" = the top of every hour of every day.
* "*/10 * * * * *" = every ten seconds.
* "0 0 8-10 * * *" = 8, 9 and 10 o'clock of every day.
* "0 0 8,10 * * *" = 8 and 10 o'clock of every day.
* "0 0/30 8-10 * * *" = 8:00, 8:30, 9:00, 9:30 and 10 o'clock every day.
* "0 0 9-17 * * MON-FRI" = on the hour nine-to-five weekdays
* "0 0 0 25 12 ?" = every Christmas Day at midnight

Der Cron-Ausdruck wird durch sechs Felder dargestellt:

second, minute, hour, day of month, month, day(s) of week

(*) bedeutet match any

*/X bedeutet "jedes X"

? ("kein bestimmter Wert") - nützlich, wenn Sie in einem der beiden Felder etwas angeben müssen, in dem das Zeichen zulässig ist, das andere jedoch nicht. Wenn ich zum Beispiel möchte, dass mein Abzug an einem bestimmten Tag des Monats (z. B. dem 10.) ausgelöst wird, es mir aber egal ist, welcher Wochentag gerade ist, würde ich "10" in den Tag einfügen. Monatsfeld und "?" im Feld Wochentag.

PS: Damit es funktioniert, müssen Sie es in Ihrem Anwendungskontext aktivieren: https://docs.spring.io/spring/docs/3.2.x/spring-framework-reference/html/scheduling. HTML # Scheduling-Annotation-Unterstützung

495
gipinani

Für meinen Scheduler benutze ich es, um jeden Tag um 6 Uhr morgens zu feuern, und meine Cron-Notation lautet:

0 0 6 * * *

Wenn du 1: 01: willst dann stelle es auf

0 1 1 * * *

Kompletter Code für den Scheduler

@Scheduled(cron="0 1 1 * * *")
public void doScheduledWork() {
    //complete scheduled work
}

** SEHR WICHTIG

Um sicher zu gehen, dass Ihr Planer die richtige Brenndauer hat, müssen Sie den Zonenwert folgendermaßen einstellen (ich bin in Istanbul):

@Scheduled(cron="0 1 1 * * *", zone="Europe/Istanbul")
public void doScheduledWork() {
    //complete scheduled work
}

Die vollständigen Zeitzonenwerte finden Sie unter hier .

Hinweis: Meine Spring-Framework-Version lautet: 4.0.7.RELEASE

73

Sie können Ihre Methode mit @Scheduled(cron ="0 1 1 * * ?") annotieren.

0 - ist für Sekunden

1- 1 Minute

1 Stunde des Tages.

21
user3298173

In der Antwort von gipinani fehlt etwas

@Scheduled(cron = "0 1 1,13 * * ?", zone = "CST")

Dies wird bei 1.01 und 13.01 ausgeführt. Es kann verwendet werden, wenn Sie den Job mehrmals täglich ohne Muster ausführen müssen.

Und das Zonenattribut ist sehr nützlich, wenn Sie Bereitstellungen auf Remoteservern durchführen. Dies wurde mit der Feder 4 eingeführt.

10

Eines ist mir aufgefallen: spring CronTrigger ist kein Cron. Es kann vorkommen, dass Sie 7 Parameter in einem gültigen Cron-Ausdruck haben (den Sie auf cronmaker.com validieren können) und diesen dann nicht akzeptieren. In den meisten Fällen löschen Sie einfach den letzten Parameter und alles funktioniert einwandfrei.

6
Irlan Cidade

Frühlings-Cron-Ausdruck für jeden Tag 1: 01: morgens

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

weitere Informationen finden Sie in den folgenden Informationen:

https://docs.Oracle.com/cd/E12058_01/doc/doc.1014/e12030/cron_expressions.htm

1
MACCXpace