Рубрики
Без рубрики

Разница между синтаксисом Cron в Linux и Spring

Узнайте разницу между синтаксисом Cron в Linux и Spring

Автор оригинала: Mona Mohamadinia.

1. Обзор

Выражения Cron позволяют нам планировать выполнение задач периодически в определенную дату и время. После его внедрения в Unix другие операционные системы и библиотеки программного обеспечения на базе Unix (включая Spring Framework) приняли его подход к планированию задач.

В этом кратком руководстве мы увидим, в чем разница между выражениями Cron в операционных системах на базе Unix и Spring Framework.

2. Unix Cron

Cron в большинстве систем на базе Unix имеет пять полей: минута (0-59), час (0-23), день месяца (1-31), месяцы (1-12 или имена) и день недели (0-7 или имена).

Мы можем поместить некоторые специальные значения в каждое поле, например звездочку (*):

5 0 * * *

Задание будет выполняться каждый день через 5 минут после полуночи. Также можно использовать диапазон значений:

5 0-5 * * *

Здесь планировщик будет выполнять задачу через 5 минут после полуночи, а также через 5 минут после 1, 2, 3, 4 и 5 часов каждый день.

Или мы можем использовать список значений:

5 0,3 * * *

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

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

Давайте посмотрим, как Spring удается устранить это ограничение.

3. Пружинный Крон

Чтобы запланировать периодические фоновые задачи весной, мы обычно передаем выражение Cron в аннотацию @Scheduled .

В отличие от выражений Cron в системах на базе Unix, выражение Cron в Spring имеет шесть полей, разделенных пробелами: секунда, минута, час, день, месяц и день недели .

Например, для выполнения задачи каждые десять секунд мы можем сделать:

*/10 * * * * *

Кроме того, запускать задачу каждые 20 секунд с 8 утра до 10 часов каждый день:

*/20 * 8-10 * * *

Как показано в приведенных выше примерах, первое поле представляет вторую часть выражения. В этом разница между двумя реализациями. Несмотря на разницу во втором поле, Spring поддерживает многие функции из исходного Cron, такие как номера диапазонов или списки.

С точки зрения реализации, класс CronSequenceGenerator отвечает за анализ выражений Cron весной.

4. Заключение

В этом коротком уроке мы увидели разницу в реализации Cron между Spring и большинством систем на базе Unix. По пути мы увидели несколько примеров обеих реализаций.

Чтобы увидеть больше примеров выражений Cron, настоятельно рекомендуется ознакомиться с нашим Руководством по выражениям Cron . Более того, взглянув на исходный код класса CronSequenceGenerator , мы можем получить хорошее представление о том, как Spring реализует эту функцию.