В чем разница между */10 и 0/10 в Quartz Scheduler?

Вопрос или проблема

Мы используем задания Quartz в проекте.

Я не понимаю тонкое различие между этими двумя выражениями Cron, используемыми в Quartz:

*/10 * * * * ?

и

0/10 * * * * ?

Означает ли первое “Запускайте ваше задание каждые 10 секунд с этого момента”?

В то время как второе означает “Запускайте задание каждые 10 секунд, начиная с xx:yy:00 в следующую минуту”?

Так, например, если текущее время 16:32:47, задание будет запущено в:

  • 16:33:00
  • 16:33:10
  • 16:33:20
  • 16:33:30
  • 16:33:40
  • 16:33:50
  • 16:34:00
  • 16:34:10

и так далее?

*/10 * * * * ? означает каждую десятую секунду – например, 16:00:00, 16:00:10, 16:00:20 и так далее.

0/10 * * * * ? означает каждую десятую секунду, начиная с 0, что, как вы заметили, не очень полезно, и, вероятно, проще использовать предыдущий синтаксис.

Случай использования этого синтаксиса касается не нулевых аргументов, например:
2/10 * * * * ? означает каждую десятую секунду, начиная с 2, так что вы получите 16:00:02, 16:00:12 и так далее.

Ответ или решение

Вопрос о различиях между выражениями cron */10 * * * * ? и 0/10 * * * * ? в контексте планировщика Quartz требует внимательного разбора. Оба выражения предназначены для выполнения задач с заданным интервалом времени, однако они имеют некоторые тонкие, но важные расхождения.

Что означает каждое выражение:

  1. *`/10 ?`**

    • Это выражение означает "каждые 10 секунд, начиная с любого времени". Важно отметить, что символ * в первой позиции (который соответствует секундам) указывает на то, что задача будет запускаться на каждую десятую секунду. Например, задачи будут запускаться в 16:00:00, 16:00:10, 16:00:20, 16:00:30 и так далее, начиная с текущего момента времени, где бы вы ни находились.
  2. 0/10 * * * * ?

    • Это выражение говорит "начиная с нуля, запускай задачу каждые 10 секунд". То есть, если текущее время 16:32:47, задача не будет запускаться до 16:33:00, и затем каждые 10 секунд — 16:33:00, 16:33:10, 16:33:20 и так далее. Здесь 0 указывает на то, что первый запуск произойдёт точно в начале следующей минуты — именно в момент, когда секунды достигают нуля.

Подход к использованию

  • *Применимость `/10`**:

    • Использование */10 более универсально, поскольку оно позволяет начать выполнение задачи прямо сейчас, независимо от текущего времени. Это может быть полезно в случаях, когда необходимо непрерывное выполнение задач.
  • Применимость 0/10:

    • В то же время, 0/10 может оказаться полезным, когда необходимо синхронизировать выполнение задач с началом каждой минуты. Например, если вы хотите, чтобы задание запускалось синхронно с другими процессами или задачами, начинающими свои циклы каждые 10 секунд с нуля.

Примеры

  • Текущая дата и время: 16:32:47:

    • *С использованием `/10`:**

    • Запуск в: 16:32:50, 16:33:00, 16:33:10, 16:33:20 и так далее.

    • С использованием 0/10:

    • Запуск в: 16:33:00, 16:33:10, 16:33:20 и так далее.

Как видно из представленных примеров, использование первого или второго выражения может значительно повлиять на время начала выполнения задачи и, соответственно, на её функциональность в зависимости от тех требований, которые предъявляются к планировщику задач.

Заключение

Зная эти различия, вы сможете более точно настраивать задачи в Quartz Scheduler, оптимизируя их выполнение под конкретные требования вашего проекта. Выбор между */10 и 0/10 зависит от ваших целей и контекста, в котором требуется выполнение задач.

Оцените материал
Добавить комментарий

Капча загружается...