У меня есть задание на кварце, которое уже запланировано. Я хочу обновить связанный с ним JobDataMap. Если я получаю JobDataMap с JobDataMap jobDataMap = scheduler.getJobDetail(....).getJobDataMap()
, это карта «живая»? то есть. если я его изменю, будет ли он сохранен в планировщике? Если нет, то как я его сохраняю?Обновление существующего JobDataMap
ответ
См http://www.quartz-scheduler.org/docs/tutorial/TutorialLesson03.html:
Экземпляр Работа может быть определена как "с сохранением состояния" или "без сохранения состояния". Работы с нестоящим состоянием имеют только JobDataMap, хранящиеся в то время, когда они добавлены в планировщик . Это означает, что любые изменения, внесенные в содержание карты данных задания во время выполнения задания будут потеряны и не будут выполняться при выполнении следующего задания .
... работа с состоянием - это как раз наоборот - его JobDataMap повторно сохраняется после при каждом выполнении задания.
Вы отмечаете 'на работе с учетом состояния при наличии его реализовать интерфейс StatefulJob , а не интерфейса работы.
У меня была аналогичная проблема: у меня есть второй триггер, который запускает работу с состоянием, которая работает в очереди на карте данных задания. Каждый раз, когда срабатывает работа, он обследуется из очереди и выполняет некоторую работу над элементом опроса. При каждом выполнении задания очередь имеет один меньший элемент (очередь обновляется правильно из заданий). Когда очередь пуста, задание выполняется самостоятельно.
Я хотел иметь возможность внешнего обновления списка аргументов текущего задания/триггера, чтобы предоставить больше аргументов очереди. Однако просто получить карту данных и обновить очередь было недостаточно (следующее выполнение показывает, что очередь не обновляется). Проблема в том, что Quartz только обновляет карту данных задания экземпляра задания после выполнения.
Вот решение, которое я нашел:
JobDetail jobDetail = scheduler.getJobDetail("myJob", "myGroup");
jobDetail.getJobDataMap.put("jobQueue", updatedQueue);
scheduler.addJob(jobDetail, true);
Последняя строка инструктирует Quartz заменить сохраненное задание с одним вы обеспечиваете. В следующий раз, когда задание будет запущено, он увидит обновленную очередь.
У вас возникла проблема с последней версией Quartz (2.6.10?) –
Извините, это версия 2.1.7 ... работала нормально с 2.1.6 ранее –
В кварце 2.0. StatefulJob
устарел. Чтобы сохранить карту данных задания, используйте @PersistJobDataAfterExecution
в классе заданий. Обычно он идет с @DisallowConcurrentExecution
.
Спасибо за информацию Bozho. –
Но в какой таблице мы можем найти информацию JobDataMap, я проверил все таблицы, но я не нашел их. –
Это столбец Job_data таблицы QRTZ_JOB_DETAILS? –
- 1. Модифицирование JobDataMap в Quartz.NET
- 2. Обновление существующего вида расширения
- 3. Обновление существующего Outlook Назначение
- 4. Обновление существующего проекта Padrino
- 5. Обновление существующего приложения
- 6. Обновление существующего ресурса
- 7. Обновление существующего предмета
- 8. Обновление существующего проекта
- 9. Обновление существующего приложения iphone
- 10. Доступ к JobDatamap перед выполнением
- 11. Обновление существующего объекта с объективом
- 12. Обновление существующего веб-сайта. как?
- 13. Обновление существующего значения в php
- 14. Обновление существующего билета в VTiger
- 15. Обновление версии зависимостей существующего пакета?
- 16. Обновление файла внутри существующего MSI
- 17. Solr, обновление блока существующего документа
- 18. Обновление существующего индекса в pymongo
- 19. Обновление уже существующего поля MYSQL
- 20. CQS и обновление существующего объекта
- 21. Обновление существующего pdf с C#
- 22. Обновление уже существующего приложения iOS
- 23. Обновление существующего токена пользователя facebook
- 24. Обновление существующего отчета в rPubs
- 25. Обновление JSF2 до существующего проекта
- 26. Pass BlockingQueue в JobDataMap of Quartz
- 27. Quartz Scheduler - Работа Цепной с JobDataMap
- 28. Обновление существующего приложения в Enterprise App Store
- 29. Обновление существующего профиля пользователя в ASP.NET
- 30. Laravel 5 Обновление существующего в базе данных
но что делать, если я хочу обновить работу за пределами исполнения? например от JMX? –