Настройка кварца
-
18-09-2019 - |
Вопрос
здравствуйте, я кое-что понял с кварцем во время работы. Скажем, cron настроен на пробуждение каждые 2 минуты с выражением 0 0/2 * * *
? .
Когда вы запускаете проект, скажем, в 13:10:30, первое действие происходит в 13:12:00, второе — в 13:14:00, а в остальных случаях — каждые 2 минуты 0 секунд.Очевидно, что между запуском проекта и первым появлением действия прошло всего 1 минута: 30 секунд.
Есть ли способ в первый раз соблюдать 2 минуты независимо от того, в какие секунды начинается проект?
Решение
Задания Cron настраиваются в Quartz с помощью CronTrigger
сорт.Альтернативой является использование SimpleTrigger
, который можно построить, используя фиксированные интервалы задержки. SimpleTrigger
имеет различные конструкторы, позволяющие указать время начала, время окончания, количество повторов, интервал повторения и так далее.
Сказав это, я бы рекомендовал не использовать Quartz для такого рода планирования, а использовать java.util.concurrent.Executors.newScheduledThreadPool()
.Это намного проще, чем Quartz, когда дело касается простых повторяющихся задач.
Другие советы
Quartz может использовать cron для планирования, которое основано на дате и времени, а не на продолжительности.Это означает, что определяемое вами выражение cron напрямую связано с текущим временем на компьютере, а не с временем запуска приложения.
Мне не известна конфигурация Quartz, которая поможет вам решить вашу проблему.Однако решение состоит в том, чтобы создать свой собственный Thread
, который запускается во время запуска вашего приложения и обычно ожидает 2 минуты перед вызовом метода:
while (running) {
Thread.sleep(1000 * 120);
doStuff();
}