Кварцевая однократная работа по запуску приложения

Я пытаюсь интегрировать задание Quartz в мое приложение spring. Я получил этот пример от здесь. В этом примере показаны задания, выполняемые с повторяющимися интервалами с помощью simpletrigger и в определенное время с помощью crontrigger.

Мое требование - запускать задание только один раз при запуске приложения. Я удалил свойство repeatInterval, но приложение выдает исключение:

org.quartz.SchedulerException: Repeat Interval cannot be zero

Есть ли способ запланировать задание только один раз?

Спасибо..

Ответ 1

Нашел ответ здесь

Игнорирование repeatInterval и настройка repeatCount = 0 делает то, что я хотел.

Ответ 2

Spring SimpleTriggerFactoryBean выполняет задание: если вы не укажете время начала, оно установит его в 'now'.

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

Я предпочитаю выполнять задание, которое повторяется, например. каждый час, но аннотируется с помощью @DisallowConcurrentExecution. Таким образом, вы гарантируете, что точно одно задание будет запущено, как при node, который первоначально размещал задание, так и после того, как он опустился.