Запуск планировщика для выполнения заданий с интервалом после завершения предыдущего задания

#scheduled-tasks #quartz-scheduler #scheduler #job-scheduling #crontrigger

#запланированные-задачи #quartz-планировщик #планировщик #планирование заданий #crontrigger

Вопрос:

Мне нужно создать планировщики для выполнения заданий (файлов классов) с заданными интервалами..На данный момент я использую планировщик Quartz, который запускает задания через определенные промежутки времени с момента его запуска.

Например: рассмотрим, что я даю выражение cron для запуска каждый час, начиная с утра 9.My первый запуск будет в 9, а мой второй запуск будет в 10 и так далее. Если выполнение моей работы занимает 20 минут, то в этом случае этот метод не так эффективен.

Что мне нужно сделать, так это запланировать задание на каждый час с момента завершения ранее выполненного задания

Например: считайте, что моя работа для запуска каждые один час запускается в 9, а для первого запуска потребовалось 20 минут, поэтому в следующий раз задание должно запускаться только в 10:20 вместо 10 (т. Е. Через час после завершения предыдущего выполненного задания)

Мне нужно знать, существуют ли какие-либо методы в Quartz Scheduling для достижения этой или любой другой логики, которую мне нужно выполнить.

Если бы кто-нибудь мог мне помочь в этом, это было бы очень полезно для меня.

Комментарии:

1. Если кто-нибудь знает, пожалуйста, помогите мне в этом..

Ответ №1:

Вы можете легко добиться этого, связав выполнение заданий в цепочку. Существуют различные подходы, которые вы можете выбрать:

(1) Внедрите Quartz JobListener и в его jobWasExecuted методе, который вызывается Quartz всякий раз, когда задание завершает выполнение, повторно запустите ваше задание.

(2) Посмотрите на Quartz JobChainingJobListener, который можно использовать для реализации простых сценариев цепочки заданий. Пожалуйста, обратите внимание, что функциональность этого прослушивателя очень ограничена, поскольку она не позволяет вставлять задержки между выполнением заданий, нет поддержки условий, которые должны быть выполнены до выполнения целевых заданий и т.д. Но вы можете использовать его как хорошую отправную точку для реализации (1).

(3) Используйте QuartzDesk (наш коммерческий продукт) или любой другой продукт, который позволяет создавать цепочки заданий, одновременно внедряя и управляя всеми зависимостями заданий вне вашего приложения. Цепочка заданий может иметь несколько целевых заданий, которые могут выполняться немедленно, с фиксированной задержкой или в произвольное время в будущем, создаваемое выражением JavaScript. Это также позволяет реализовать несколько более сложные рабочие потоки, такие как запуск целевого задания, когда несколько исходных заданий завершают свое выполнение и т.д. Я прилагаю скриншоты, показывающие, как выглядит простая цепочка заданий, которая повторно выполняет задание 1 с задержкой в 1 минуту после завершения задания 1 (с любым статусом выполнения задания):

Условие цепочки заданий
Целевые задания цепочки заданий

Комментарии:

1. Спасибо, Ян Моравец, ты спас мой день .. 🙂