Весняний вираз хрону на кожен день 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.