2014-10-01 4 views
94

Ich versuche, meinen Code auf einem Spring-Cron-Ausdruck nach einem festen Zeitplan ausführen zu lassen. Ich möchte, dass der Code jeden Tag um 01.01 Uhr ausgeführt wird. Ich habe den folgenden Ausdruck versucht, aber das hat mich nicht angezündet. Was ist mit der Syntax hier falsch?Spring Cron Ausdruck für jeden Tag 1: 01: am

@Scheduled(cron = "0 1 1 ? * *") 
public void resetCache() { 
    // ... 
} 
+0

http://www.quartz-scheduler.org/api/2.2.1/org/quartz/CronExpression.html –

+0

http://www.quartz-scheduler.org/api/2.2.1/org/ quartz/CronTrigger.html? is-external = true –

+0

Mein Cron-Ausdruck 0 0 0 1 JAN MON hat bis letztes Jahr gearbeitet. Ab dem 1. Januar höre ich auf zu arbeiten und sage ungültigen Cron-Ausdruck. Obwohl dies für sehr wenig Häufigkeit vorgesehen war, konnten wir den tc-Server ausführen. Nach dem 1. Januar tat es nicht. Als ich zu 0 0 7 wechselte? * SUN es fing an zu arbeiten. Ich bin neugierig zu wissen, warum 0 0 0 1 JAN MON hat aufgehört zu arbeiten, wo es im letzten Jahr Jan gut war. – spandey15

Antwort

284

Versuchen mit:

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

Nachfolgend finden Sie die Beispielmuster aus der Feder Forum finden:

* "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/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 

Cron Expression durch sechs Felder dargestellt:

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

(*) bedeutet matc h jede

*/X bedeutet „jedes X“

? („kein spezifischer Wert“) - nützlich, wenn Sie etwas in einem der beiden Felder angeben, in dem der Charakter erlaubt, aber nicht die anderen. Zum Beispiel, wenn ich möchte, dass mein Auslöser an einem bestimmten Tag des Monats (z. B. dem 10.) ausgelöst wird, aber es mir egal ist, welcher Tag der Woche das ist, würde ich "10" in den Tag setzen- Monatsfeld und "?" im Feld Wochentag.

PS: Um es Arbeit zu machen, vergessen Sie nicht in Ihrem Anwendungskontext zu aktivieren: kann

+9

Das Format ist auch im Frühjahr selbst hier dokumentiert - http://docs.spring.io/spring/docs/3.0 .x/api/org/org/springframework/scheduling/support/CronSequenceGenerator.html – chrismarx

+1

Ich denke, Spring Cron ist in der Lage, auch Sekunden zur Verfügung zu stellen, aber normales Unix cron ist minutenbasiert ... wie in unix man pages minute ist die kleinste Zeiteinheit das kann konfiguriert werden. – nanosoft

+4

Was ist die Bedeutung des "?" Charakter? Gilt es nur für das Feld "Tag (e) der Woche"? Würde es funktionieren/etwas anderes machen, wenn wir das "?" mit '*' am Weihnachtstag Beispiel? – encrest

20

Sie verwenden Ihre Methode mit @Scheduled(cron ="0 1 1 * * ?") mit Anmerkungen versehen.

0 - ist für Sekunden

1- 1 Minute

1 - Stunde des Tages.

6

Etwas aus gipinani Antwort

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

Dies wird bei 1,01 und 13,01 auszuführen. Es kann verwendet werden, wenn Sie den Job mehrmals täglich ohne Muster ausführen müssen.

Und das Zone-Attribut ist sehr nützlich, wenn Sie Bereitstellungen auf Remote-Servern durchführen. Dies wurde mit der Feder 4 eingeführt.

+0

Beachten Sie, dass die Abkürzung (für die Zeitzone) für JDK 1.1 unterstützt wird.x nur Kompatibilität und vollständige Namen sollten verwendet werden - nach Javadoc – slashron

35

Für meine Scheduler, ich bin mit jedem Tag um 6.00 Uhr Feuer und meine cron Notation ist:

0 0 6 * * * 

Wenn Sie möchten, 1: 01: am Set dann zu

0 1 1 * * * 

komplette Code für den Scheduler

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

** SEHR WICHTIG

Um über die Brennzeit Richtigkeit Ihrer Scheduler sicher zu sein, haben Sie Zone Wert wie folgt einzustellen (Ich bin in Istanbul):

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

Sie können die vollständige Zeitzonenwerte von here finden.

Hinweis: My Spring-Framework Version ist: 4.0.7.RELEASE

+1

Ich weiß nicht, warum Ihre Antwort nur 12 haben, auch wenn es die einzige richtige Antwort hier ist! –

+1

Vielen Dank @MoayadAbuJaber. Die Punktzahl ist nicht wichtig, wenn Entwickler ihre Probleme mit meinen Antworten beheben können, ist es genug, Prost. – webmaster

+0

kann ich Zone mit xml config verwenden sheduler '' ?? – shareef

4

Eine Sache, die ich bemerkt habe, ist: Frühling CronTrigger nicht Cron ist. Es kann sein, dass Sie 7 Parameter in einem gültigen Cron-Ausdruck haben (den Sie auf cronmaker.com validieren können) und dann nicht akzeptieren. In den meisten Fällen löschen Sie einfach den letzten Parameter und alles funktioniert einwandfrei.

+0

"CronTrigger ist nicht Quarz" –