Я использую Quartz Scheduling, и есть 2 задания. Первое задание выполняет задачи около 2 минут, а второе - для очистки операций временных файлов. Поэтому мне нужно настроить расписание для работы таким образом, чтобы после выполнения первого задания или завершения выполнения задач мне нужно было выполнить операции очистки с помощью второго задания.
Учитывая пример 9 - "Слушатели работы" в Quartz 2.1.x, в котором говорится, что мы можем определить метод с именем jobWasExecuted (_, _); в приемнике заданий, и он выполняется, когда 1-е задание выполняется/или выполняется в рабочем состоянии.
Можем ли мы настроить расписание, которое может прослушивать первое задание, а затем выполняет второе? или,
Можем ли мы определить метод join(), как в Java Multithreading, который может выполняться по завершении первого задания?
Как сделать "последовательное" планирование заданий (кварц?)
Ответ 1
В настоящее время нет "прямого" или "бесплатного" способа подключения триггеров с помощью Кварц. Однако есть несколько способов сделать это без много усилий. Ниже приведен краткий обзор пары:
Один из способов - использовать прослушиватель (т.е. TriggerListener, JobListener или SchedulerListener), который может заметить завершение задания/триггера и затем немедленно планируйте запуск нового триггера. Этот подход может немного, потому что вам нужно будет сообщить слушателю, какая работа следует, что - и вам может потребоваться беспокоиться о сохранении этого Информация.
Другим способом является создание задания, которое содержит в своем JobDataMap имя следующего задания для запуска, а по завершении задания (последний шаг в методе Execute()) имеет задание следующего задания. Несколько человек делают это и им повезло. Большинство из них создали базовый (абстрактный) класс, который является заданием, который знает, как получить задание и группу из JobDataMap с помощью специальных ключей (констант) и содержит код для планирования идентифицированного задания. затем они просто делают расширения этого класса, включая дополнительные работа должна выполняться.
Ответ 2
Я знаю, что это старый вопрос, но, тем не менее, есть еще две возможности для цепочки выполнения ваших заданий, которые люди могут найти полезными:
1) Используйте JobChainingJobListener, который включен в стандартный дистрибутив Quartz с самых ранних выпусков. Этот слушатель позволяет вам программно определять простые цепочки заданий, используя метод addJobChainLink.
2) Используйте коммерческое решение, такое как QuartzDesk, что я являюсь основным разработчиком. QuartzDesk содержит надежный механизм цепочки создания заданий, который позволяет экстернализировать определение цепочки заданий из кода приложения и позволяет обновлять цепочки заданий во время выполнения через графический интерфейс без изменения, перераспределения и перезапуска приложения. Цепочка заданий может быть связана с конкретным заданием, триггером или может быть глобальной цепочкой заданий, которая выполняется всякий раз, когда выполняется любое из ваших заданий (полезно для глобальных обработчиков сбоев выполнения задания и т.д.).
Ответ 3
Как я могу удержаться от задания одновременно?
Quartz.NET 2.x
Внедрите IJob, а также украсьте свой класс заданий [DisallowConcurrentExecution]. Прочтите документацию по API для DisallowConcurrentExecutionAttribute для получения дополнительной информации.
Аннотация доступна в реализации Java.