Вопрос

здравствуйте, я кое-что понял с кварцем во время работы. Скажем, 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();
}
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top