Перейти к основному содержимому

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

· 3 мин. чтения

1. Обзор

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

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

2. Юникс Крон

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. Весенний Крон

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

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

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

*/10 * * * * *

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

*/20 * 8-10 * * *

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

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

4. Вывод

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

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