Обновите существующую JobDataMap - PullRequest
12 голосов
/ 13 мая 2010

У меня есть задание Quartz, которое уже запланировано.Я хочу обновить JobDataMap, связанный с ним.Если я получу JobDataMap с JobDataMap jobDataMap = scheduler.getJobDetail(....).getJobDataMap(), будет ли эта карта "живой"?то есть.если я его поменяю, будет ли он сохранен в планировщике?Если нет, то как мне сохранить это?

Ответы [ 3 ]

29 голосов
/ 25 августа 2011

в кварце 2.0. StatefulJob устарело. Чтобы сохранить карту данных задания, используйте @PersistJobDataAfterExecution в классе задания. Это обычно идет с @DisallowConcurrentExecution.

13 голосов
/ 23 июня 2010

У меня была похожая проблема: у меня есть второй триггер, который запускает задание с сохранением состояния, которое работает в очереди на карте данных задания. Каждый раз, когда задание запускается, оно опрашивает очередь и выполняет некоторую работу с опрашиваемым элементом. При каждом выполнении задания очередь имеет на один элемент меньше (очередь корректно обновляется изнутри задания). Когда очередь пуста, задание отменяется.

Я хотел иметь возможность внешне обновлять список аргументов текущего задания / триггера, чтобы предоставить больше аргументов в очередь. Однако простого извлечения карты данных и обновления очереди было недостаточно (следующее выполнение показывает, что очередь не обновлена). Проблема заключается в том, что Quartz обновляет карту данных задания только после выполнения.

Вот решение, которое я нашел:

JobDetail jobDetail = scheduler.getJobDetail("myJob", "myGroup");
jobDetail.getJobDataMap.put("jobQueue", updatedQueue);
scheduler.addJob(jobDetail, true);

Последняя строка указывает Quartz заменить сохраненное задание тем, которое вы предоставляете. При следующем запуске задания оно увидит обновленную очередь.

7 голосов
/ 20 мая 2010

См. http://www.quartz -scheduler.org / docs / tutorial / TutorialLesson03.html :

Экземпляр задания можно определить как «с состоянием» или «без состояния»».Для заданий без сохранения состояния JobDataMap хранится только в момент их добавления в планировщик.Это означает, что любые изменения, внесенные в содержимое карты данных задания во время выполнения задания, будут потеряны и не будут видны заданию при следующем его выполнении.

... задание с состоянием простонаоборот - его JobDataMap повторно сохраняется после каждого выполнения задания.

Вы 'помечаете' задание как сохраняющее состояние, если оно реализует интерфейс StatefulJob, а не интерфейс задания.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...