更新现有作业数据映射
2022-09-02 02:27:47
我有一个已经安排好的 Quartz 作业。我想更新与之关联的 JobDataMap。如果我得到一个带有 的 JobDataMap,该地图是“实时”的吗?即。如果我更改它,它会保留在调度程序中吗?如果没有,我该如何坚持它?JobDataMap jobDataMap = scheduler.getJobDetail(....).getJobDataMap()
我有一个已经安排好的 Quartz 作业。我想更新与之关联的 JobDataMap。如果我得到一个带有 的 JobDataMap,该地图是“实时”的吗?即。如果我更改它,它会保留在调度程序中吗?如果没有,我该如何坚持它?JobDataMap jobDataMap = scheduler.getJobDetail(....).getJobDataMap()
在石英 2.0 中。 已弃用。为了持久化作业数据映射,请在作业类上使用。它通常与 .StatefulJob
@PersistJobDataAfterExecution
@DisallowConcurrentExecution
我遇到了类似的问题:我有一个第二个触发器,它触发了一个有状态作业,该作业在作业的数据映射中的队列上工作。每次触发作业时,它都会从队列中轮询,并对轮询的元素执行一些工作。每次执行作业时,队列都会少一个元素(队列从作业中正确更新)。当队列为空时,作业将取消调度。
我希望能够在外部更新正在进行的作业/触发器的参数列表,以便为队列提供更多参数。但是,仅检索数据映射并更新队列是不够的(以下执行显示队列未更新)。问题在于 Quartz 仅在执行后更新作业实例的作业数据映射。
以下是我发现的解决方案:
JobDetail jobDetail = scheduler.getJobDetail("myJob", "myGroup");
jobDetail.getJobDataMap.put("jobQueue", updatedQueue);
scheduler.addJob(jobDetail, true);
最后一行指示 Quartz 将存储的作业替换为您提供的作业。下次触发作业时,它将看到更新的队列。