2014-10-01 14 views
94

Próbuję wykonać mój kod zgodnie z ustalonym harmonogramem, na podstawie wyrażenia Spring cron. Chciałbym, aby kod był wykonywany codziennie o 1: 01: jestem. Spróbowałem następującego wyrażenia, ale to mi nie wystrzeliło. Co jest nie tak z tą składnią?Wiosenne wyrażenie cron na każdy dzień 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/// Kwarc/CronTrigger.html? is-external = true –

+0

moje wyrażenie crona 0 0 0 1 JAN MON działał do zeszłego roku. Od 1 stycznia przestaje działać, mówiąc o nieprawidłowym wyrażeniu crona. Chociaż było to przeznaczone na mniejszą częstotliwość, ale byliśmy w stanie uruchomić serwer tc. po 1 stycznia nie udało się. Kiedy zmieniłem na 0 0 7? * SUN zaczęło działać. Jestem ciekawostką wiedzieć, dlaczego 0 0 0 1 JAN MON przestał działać tam, gdzie było dobrze w zeszłym roku jan. – spandey15

Odpowiedz

284

spróbuj:

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

Poniżej znajdziesz przykładowe wzory z forum wiosny:

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

wyrażenie Cron jest reprezentowany przez sześciu dziedzinach:

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

(*) oznacza matc h każdy

*/X oznacza „każdy X”

? („nie ma określonej wartości”) - przydatne, gdy trzeba określić coś w jednej z dwóch dziedzin, w których znak jest dozwolone, ale nie innych. Na przykład, jeśli chcę, aby mój wyzwalacz wystrzelił w konkretny dzień miesiąca (powiedzmy dziesiąty), ale nie obchodzi mnie, w którym dniu się znajduje, wstawiłbym "10" w ciągu dnia. of-month field i "?" w polu dnia tygodnia.

PS: Aby to działało, należy pamiętać, aby włączyć go w kontekście aplikacji:

+9

Format jest również udokumentowany na wiosnę tutaj - http://docs.spring.io/spring/docs/3.0 .x/api/org/springframework/scheduling/support/CronSequenceGenerator.html – chrismarx

+1

Domyślam się, że wiosna cron jest w stanie zapewnić sekundowanie, ale normalny unix cron jest oparty na minutach ... jak na unixowych stronach minuta jest najmniejszą jednostką czasu które można skonfigurować. – nanosoft

+4

jakie jest znaczenie "?" postać? Czy dotyczy to tylko pola "dzień (dni) tygodnia"? Czy to zadziałałoby/zrobiłoby coś innego, gdybyśmy zastąpili "?" z "*" w przykładzie na Boże Narodzenie? – encrest

20

Można użyć adnotacji metodę z @Scheduled(cron ="0 1 1 * * ?").

0 - jest sekund

1 1 minutę

1 - godzinnego dnia.

6

Coś brakuje odpowiedzi gipinani za

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

ten będzie wykonywał na 1.01 i 13.01. Może być używany, gdy trzeba uruchomić zadanie bez wzoru wiele razy dziennie.

Atrybut strefy jest bardzo przydatny podczas wdrażania na serwerach zdalnych. Zostało to wprowadzone wiosną 4.

+0

Należy pamiętać, że obsługa skrótów (dla strefy czasowej) dotyczy JDK 1.1.x należy używać tylko nazw zgodnych i pełnych nazw - jak na javadoc – slashron

35

Dla mojego scheduler, używam go do ognia o 6 rano codziennie i moja notacja cron jest:

0 0 6 * * * 

Jeśli chcesz 1: 01: jestem następnie ustawić go do

0 1 1 * * * 

Kompletny kod dla planującego

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

** bardzo ważne

Aby mieć pewność co do czasu wypalania poprawności swojej scheduler, trzeba ustawić wartość strefy tak (jestem w Stambule):

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

można znaleźć kompletne wartości stref czasowych od here.

Uwaga: My Wiosna wersja ramy jest: 4.0.7.RELEASE

+1

Nie wiem, dlaczego twoja odpowiedź ma tylko 12, nawet jeśli jest to jedyna poprawna odpowiedź tutaj! –

+1

Bardzo dziękuję @MoayadAbuJaber. Wynik nie jest ważny, jeśli programiści są w stanie naprawić swoje problemy z moimi odpowiedziami to wystarczy, okrzyki. – webmaster

+0

Czy mogę używać strefy z xml config sheduler '' ?? – shareef

4

Jedno zauważyłam to: wiosna CronTrigger nie jest cron. Możesz otrzymać 7 parametrów w poprawnym wyrażeniu cron (które możesz sprawdzić na cronmaker.com), a następnie nie zaakceptuj go. Większość przypadków po prostu usuwa ostatni parametr i wszystko działa dobrze. cron wyrażenie

+0

"CronTrigger is not Quartz" –

Powiązane problemy