代码之家  ›  专栏  ›  技术社区  ›  Paul Tomblin

更新现有JobDataMap

  •  12
  • Paul Tomblin  · 技术社区  · 14 年前

    我有一份工作已经安排好了。我想更新与其关联的JobDataMap。如果我得到了一个JobDataMap JobDataMap jobDataMap = scheduler.getJobDetail(....).getJobDataMap() ,那是“现场”地图吗?如果我改变它,它会被保存在调度程序中吗?如果没有,我怎么坚持?

    3 回复  |  直到 12 年前
        1
  •  7
  •   Tommi    14 年前

    看到了吗 http://www.quartz-scheduler.org/docs/tutorial/TutorialLesson03.html :

    作业实例可以定义为 “有状态”或“无状态”。 非州的工作只有自己的职责 已添加到计划程序。这意味着 执行期间作业数据映射的 工作的一部分会失去,也不会 下一次看到它的时候 执行。

    它的JobDataMap在 工作的每一次执行。

    界面,而不是工作 接口。

        2
  •  35
  •   Bozho    13 年前

    StatefulJob 已弃用。要持久化作业数据映射,请使用 @PersistJobDataAfterExecution 在工作课上。它通常与 @DisallowConcurrentExecution .

        3
  •  15
  •   Leo    14 年前

    我希望能够从外部更新正在进行的作业/触发器的参数列表,以便为队列提供更多参数。但是,仅仅检索数据映射和更新队列是不够的(下面的执行显示队列没有更新)。问题是Quartz只在执行后更新作业实例的作业数据映射。

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

    最后一行指示Quartz用您提供的作业替换存储的作业。下次激发作业时,它将看到更新的队列。