Предположим, у меня есть выражение Cron как 0 0 12 1/1 *? * По некоторым причинам сервер был остановлен между 11:50 и 12:05 и снова начал работу после 12:05 по этому сценарию, как я могу запустить пропущенное запланированное выражение Cron после запуска сервера? Есть ли у кварца какое-либо решение для решения вышеуказанной проблемы.Об увольнении пропущенных запланированных выражений Cron в кварце?
ответ
См. Кварцевую документацию tutorials или this отличная статья для «Инструкции о пропущенных пропусках», которые являются политиками, используемыми в триггерах кварца для восстановления пропущенных заданий.
Если вы хотите терпеть выключение/сбой сервера, вам необходимо настроить Qaurtz на использование постоянного хранилища заданий, чтобы он как JDBCJobStore «дождался» последнего выполнения задания до сбоя.
Обновление: См this answer, что объяснить, как создать извлекаемых рабочих мест.
У меня также возникла проблема с тем, чтобы запустить последнюю проверочную работу при перезагрузке сервера.
Решение, которое я нашел, состоит в том, чтобы вернуться к одному временному интервалу для триггера и рассчитать то, что было бы следующим временем стрельбы. Итерированием всех триггеров может быть определено самое последнее время, которое должен был запустить триггер в прошлом.
Вычислить интервал между каждыми топками:
Date nextFireTime = trigger.getNextFireTime();
Date subsequentFireTime = trigger.getFireTimeAfter(nextFireTime);
long interval = subsequentFireTime.getTime() - nextFireTime.getTime();
не найти следующий раз огневого за один раз, пока интервал в прошлом:
Date previousPeriodTime = new Date(System.currentTimeMillis() - interval);
Date previousFireTime = trigger.getFireTimeAfter(previousPeriodTime);
Я обнаружил, что если вы используете a CronTrigger
это мешает вам просить время огня в прошлом. Чтобы обойти эту проблему, я изменить время начала, так что выше фрагмент кода становится:
Date originalStartTime = trigger.getStartTime(); // save the start time
Date previousPeriodTime = new Date(originalStartTime.getTime() - interval);
trigger.setStartTime(previousPeriodTime);
Date previousFireTime = trigger.getFireTimeAfter(previousPeriodTime);
trigger.setStartTime(originalStartTime); // reset the start time to be nice
перебирать все триггеры и найти тот, который совсем недавно в прошлом:
for (String groupName : scheduler.getTriggerGroupNames()) {
for (String triggerName : scheduler.getTriggerNames(groupName)) {
Trigger trigger = scheduler.getTrigger(triggerName, groupName);
// code as detailed above...
interval = ...
previousFireTime = ...
}
}
Этот код могут быть реорганизованы в вспомогательные методы или классы. Я фактически использую вышеуказанный алгоритм в подклассе делегирования триггера, который затем помещаю в набор, отсортированный по предыдущим временам срабатывания.
- 1. Предотвращение пропущенных запланированных сообщений в WordPress 3.3.1
- 2. динамическое выражение cron в кварце
- 3. Уведомление об увольнении яблока
- 4. Предотвратить уведомление об увольнении - Cordova
- 5. Уведомления об увольнении в определенное время в Django
- 6. решение для запланированных загрузок - cron job?
- 7. Локальное уведомление об увольнении в неподходящее время
- 8. Как прослушать уведомление об увольнении в iOS?
- 9. выражение Cron через каждые 50 секунд в кварце
- 10. Местное уведомление об увольнении после удаления кода
- 11. Почему нет уведомлений пользователей iOS10 об увольнении?
- 12. отчет об увольнении ssrs на основе соответствия
- 13. Уведомление об увольнении с пропуском сообщения
- 14. запрос Ajax об увольнении Twitter Bootstrap оповещения
- 15. установка инструкция Misfire в кварце
- 16. Grails - использование значения конфигурации для выражения cron в запланированных заданиях
- 17. Является ли Cron единственным методом для запуска запланированных задач?
- 18. Предложения по сохранению запланированных данных на основе cron
- 19. Анимация в кварце 2D
- 20. Рисование уравнения в кварце
- 21. Гладкие дуги в кварце?
- 22. Перемещение Прямоугольник в кварце
- 23. Множественный планировщик в кварце
- 24. UIPopover, представляющий modal view controller, нуждается в уведомлении об увольнении
- 25. Как создать сообщение об автоматическом увольнении в окне ANDROID?
- 26. Быстрое локальное уведомление об увольнении - что-то делать в приложении
- 27. Установка уведомления об увольнении в определенное время на Android
- 28. Модуль Perl для запланированных заданий - бит, подобный cron
- 29. Выполнение запланированных заданий
- 30. Rails: отправка запланированных писем
: Спасибо за ваш ответ. Мы используем кварц-1.8.6, когда я использую код ниже. Я думаю, что некоторые классы не находятся в банке. мне нужно обновить новую версию кварца? trigger = newTrigger() .withIdentity ("trigger3", "group1") .withSchedule (cronSchedule ("0 0/2 8-17 * *?")) .forJob ("myJob", "group1") .build(); ваша помощь будет оценена по достоинству. – Loganathan
Редактировать свой вопрос и добавить код и информацию, чтобы я мог помочь вам лучше :) – zerologiko