Подробно объясните выражения cron в задачах на время

Spring Boot

1. Введение

мы часто используемcronВыражения для определения стратегии выполнения временных задач, сегодня мы подведем итогиcronНекоторые знания о выражениях.

2. Определение выражений cron

cronвыражение представляет собой строку, состоящую из6помещения делятся на7Каждый домен представляет значение времени. Формат следующий:

 [秒] [分] [时] [日] [月] [周] [年]

Обычно часть, определяющая «год», может быть опущена, а фактическая часто используемая часть состоит из первых шести частей.

2.1 Определение частей cron

оcronОпределения различных полей показаны в следующей таблице:

площадь Требуется ли значение и диапазон подстановочный знак
второй да
0-59 , - * /
Минута да
0-59 , - * /
Время да
0-23 , - * /
день да
1-31 , - * ? / L W
Луна да
1-12 или ЯНВАРЬ-ДЕКАБРЬ , - * /
неделю да
1-7 или вс-сб
, - * ? / L #
год нет
1970-2099 , - * /

Диапазон значений в приведенном выше списке относительно легко понять, но разработчикам сложнее понять подстановочный знак.cronСложность с выражениями также связана с подстановочными знаками. Мы объясним в следующей главе

2.2 Подстановочные знаки в cron

  • ,Это относится к выполнению более чем в два момента времени, если мы определим в поле «минуты» как8,12,35, это означает, что задача синхронизации выполняется в 8-й, 12-й и 35-й точках соответственно.
  • -Это легче понять, если указать непрерывный диапазон в домене, если мы определим во «временном» домене1-6, это означает, что он срабатывает каждый час между 1 и 6 часами, используя,выражать1,2,3,4,5,6
  • *Указывает все значения, которые можно интерпретировать как «каждое». Если установлено в поле «день»*, что указывает на то, что он будет запускаться каждый день.
  • ?Указывает, что значение не указано. Вариант использования заключается в том, что вам не нужно заботиться о значении текущей настройки этого поля. Например: чтобы запускать операцию 8-го числа каждого месяца, но не заботясь о дне недели, мы можем установить это следующим образом.0 0 0 8 * ?
  • /Периодически срабатывающий в поле, символ делит выражение в своем поле на две части, где первая часть является начальным значением, которое уменьшается на одну единицу, за исключением секунд, например, определенных для «секунд».5/10Это означает каждые 10 секунд с 5-й секунды, а в «минутах» это означает каждые 10 минут с 5-й секунды.
  • Lзначит на английскомLASTозначает, можно использовать только в "день" и "неделя". Установленный в «День» означает последний день текущего месяца (на основе текущего месяца, если это февраль, он также будет основан на том, является ли это годом выполнения), в «Неделе» это означает субботу, которая эквивалентен «7» или «SAT». Если вы добавите число перед буквой «L», это будет означать последнее из данных. Например, установка формата «7L» для «week» означает «последняя суббота этого месяца».
  • WУказывает ближайший рабочий день (с понедельника по пятницу) к указанной дате запуска, может использоваться только в «день» и может использоваться только после определенного числа. Если для параметра «День» установлено «15W», это означает, что он срабатывает в рабочий день, ближайший к 15-му числу каждого месяца. Если 15-е число выпадает на субботу, найдите ближайшую пятницу (14-е число) для срабатывания, если 15-е число является рабочим днем, то найдите ближайший следующий понедельник (16-е число) для срабатывания Если 15-е число является рабочим днем ​​(понедельник на Еженедельно) 5), он будет активирован в этот день. Если это «1W», его можно переместить только на следующий ближайший рабочий день этого месяца и нельзя переместить на предыдущий месяц в течение нескольких месяцев.
  • #Указывает день недели месяца, который можно использовать только для «недели». Например, "2#3" означает третий вторник каждого месяца.

3. Пример

Вот несколько примеров для практики чтения на основе приведенных выше объяснений:

  • Выполнять каждую 1 минуту:0 */1 * * * ?
  • Выполнять раз в день в 22:00:0 0 22 * * ?
  • Выполнять раз в месяц в 1:00:0 0 1 1 * ?
  • Выполнять один раз в 23:00 последнего дня каждого месяца:0 0 23 L * ?
  • Каждую субботу в 3:00:0 0 3 ? * L
  • Выполнить один раз в 24 минуты и 30 минут:0 24,30 * * * ?

4. Резюме

подведены итоги сегодняcronВыражение, я надеюсь, что это будет полезно для вашего ежедневного развития. На самом деле, мы также можем использовать некоторые визуальные инструменты для созданияcronвыражения, но если мы также должны быть в состоянии понять выражения, написанные другими. Уделять больше внимания! Больше галантереи здесьfelord.cn.

关注公众号:Felordcn获取更多资讯

Личный блог: https://felord.cn