Spring cron выражение для каждого дня 1: 01: am

Я пытаюсь выполнить мой код в фиксированном расписании на основе выражения cron. Я хотел бы, чтобы код выполнялся каждый день в 1: 01: am. Я попробовал следующее выражение, но это не срабатывало для меня. Что не так с синтаксисом здесь?

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

Ответ 1

Попробуйте:

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

Ниже вы можете найти пример шаблона на форуме spring:

* "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 представлено шестью полями:

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

(*) означает соответствие любому

*/X означает "каждый X"

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

PS: чтобы он работал, не забудьте включить его в контексте вашего приложения: https://docs.spring.io/spring/docs/3.2.x/spring-framework-reference/html/scheduling.html#scheduling-annotation-support

Ответ 2

Для моего планировщика я использую его для стрельбы в 6 часов утра каждый день, и мои записи в формате cron:

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
}

Здесь вы можете найти полные значения часовых поясов от .

Примечание. Модная версия Spring: 4.0.7.RELEASE

Ответ 3

Вы можете использовать аннотацию своего метода с помощью @Scheduled(cron ="0 1 1 * * ?").

0 - в секундах

1- 1 минута

1 час дня.

Ответ 4

Что-то не хватает из ответа Гипинани

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

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

И атрибут зоны очень полезен, когда вы выполняете развертывание на удаленных серверах. Это было введено с помощью spring 4.

Ответ 5

Одна вещь, которую я заметил: spring CronTrigger не cron. Вы можете получить 7 параметров в действительном выражении cron (которое вы можете проверить на cronmaker.com), а затем spring не принять его. В большинстве случаев вы просто удаляете последний параметр, и все работает нормально.