Весняний вираз хрону на кожен день 1: 01: ранку


202

Я намагаюся, щоб мій код виконувався за фіксованим графіком, виходячи з виразу Spring cron. Я хотів би, щоб код виконувався щодня о 1: 01: ранку. Я спробував наступний вираз, але це не загорілося для мене. Що тут не в синтаксисі?

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



мій вираз хрону 0 0 0 1 JAN MON працював до минулого року. 1 січня далі перестань працювати, вимовляючи невірний вираз крона. Хоча це було призначено для дуже низької частоти, але нам вдалося запустити tc-сервер. після 1 січня це не стало. Коли я змінив на 0 0 7? * НД це почало працювати. Мені цікаво знати, чому 0 0 0 1 JAN MON перестав працювати там, як це було добре в минулому році січня.
спандей

0 0 0 1 JAN MON може бути невірним виразом, ну і в цьому він працював і сервер tc ніколи не скаржиться
spandey

Відповіді:


573

Спробуйте:

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

Нижче ви можете знайти приклади моделей з весняного форуму:

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

Експресія крона представлена ​​шістьма полями:

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

(*) означає відповідати будь-якому

*/X означає "кожен X"

?("немає конкретного значення") - корисно, коли вам потрібно щось вказати в одному з двох полів, у яких символ дозволений, але не в іншому. Наприклад, якщо я хочу, щоб мій курок спрацьовував у певний день місяця (скажімо, 10 числа), але мені байдуже, який день тижня трапиться, я поставив би "10" у день, місячного поля та "?" в полі денного тижня.

PS: Для того, щоб він працював, не забудьте включити його в контексті програми: https://docs.spring.io/spring/docs/3.2.x/spring-framework-reference/html/scheduling.html#scheduling- анотація-підтримка


15
Формат також задокументований навесні тут - docs.spring.io/spring/docs/3.0.x/api/org/springframework/…
chrismarx

1
Я думаю, весняний крон також може забезпечити секунди надання, але нормальний крон Unix заснований на хвилині ... так як в Unix man pages хвилина - це найменша одиниця часу, яку можна налаштувати.
nanosoft

8
яке значення "?" персонаж? Чи застосовується це лише до поля "день (-ів) тижня"? Чи вдасться / зробить щось інше, якби ми замінили "?" з прикладом '*' у прикладі Різдва?
заграти

1
@encrest подивіться тут: stackoverflow.com/questions/11499740 / ...
gipinani

1
Хороший підручник за адресою < quartz-scheduler.org/documentation/quartz-2.x/tutorials/… >
Трей Джонн

90

Для мого планувальника я використовую його для стрільби о 6 ранку щодня, і мій запис про це:

0 0 6 * * *

Якщо ви хочете 1: 01: am, тоді встановіть його

0 1 1 * * *

Повний код для планувальника

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

** ДУЖЕ ВАЖЛИВО

Щоб бути впевненим у правильності планування часу запуску, потрібно встановити таке зонове значення (я в Стамбулі):

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

Повні значення часового поясу можна знайти тут .

Примітка: Версія моєї весняної рамки: 4.0.7. РЕЛІЗ


1
Я не знаю, чому у вашій відповіді лише 12, навіть це єдина правильна відповідь тут!

2
Дуже дякую @MoayadAbuJaber. Оцінка не важлива, якщо розробники зможуть виправити свої проблеми моїми відповідями, то привіт.
Бахадір Тасдемір

Чи можу я використати зону з конфігуратором XML Sheduler <task:scheduled ref="paypalCronJob" method="runTask" cron="0 0 6 * * * ?"/>??
shareef

3
великі пальці для згадування часового поясу
Forhad

2
Дякую, @Forhad. Якщо ви розробник і маєте справу з будь-яким із питань, пов’язаних із датами та часом, вам потрібно знати подробиці часових позначок, часових поясів та перетворень. Інакше ваші дані будуть нісенітницею
Bahadir Tasdemir

22

Ви можете використовувати коментарі до свого методу @Scheduled(cron ="0 1 1 * * ?").

0 - становить секунди

1- 1 хвилина

1 - година дня.


12

Щось бракує у відповіді Гіпінані

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

Це буде виконуватися о 1.01 та 13.01. Його можна використовувати, коли потрібно виконувати завдання без шаблону кілька разів на день.

А атрибут зони дуже корисний, коли ви робите розгортання на віддалених серверах. Це було представлено 4 весни.


2
Зауважте, що підтримка абревіатур (для часового поясу) призначена лише для сумісності JDK 1.1.x і слід використовувати повні назви - відповідно до javadoc
слєшрон

6

Я помітив одне: весна CronTrigger - це не крон. Ви можете отримати 7 параметрів у дійсному виразі cron (який ви можете перевірити на cronmaker.com), а потім не сприйняти його. У більшості випадків ви просто видаляєте останній параметр, і все працює добре.


1
"CronTrigger - не кварц"
Сенді Сімонтон

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.