Quartz Job Scheduling Framework[翻译]第十二章. Quartz Cookbook (第三部分)

·替换已部署的 Job

Quartz 提供了对已部署 Job 进行修改的灵活性。它是通过允许用修改后的 JobDetail 替换已有的 JobDetail 来支持这一特性的。为展未这一例子,让我们更新代码 12.4 中的 CheckEmailJob 类。代码 12.4 是硬编码了邮件属性值到 Job 类中的。更好的做法是传入那些属性,如此则可以随意的改变它们;那让我们改动 CheckEmailJob 来做到这一点。代码 12.7 显示的是那个 Job 的更新后的版本。

代码 12.7. 更新后的允许传入属性的 CheckEmailJob

代码 12.7 的 CheckEmailJob 与 12.4 中版本主要的不同是 loadMailProperties() 方法。这个方法在 Job 首先执行的时候被调用,并检查 JobDataMap 看邮件属性是否有设置在这个 Map 中。假如有就用已设值,如果没有的话就使用 Job 类中的默认值。

代码 12.8 展示了属性值是如何被设置到 JobDataMap 中并传递给 Job 的。这些代码也显示了你怎么样才能用修改后的 JobDetail 实例替换已有实例来改变 Job 的。

代码 12.8. 显示如何更新一个已部署 Job 的例子

代码 12.8 中内容显示了两件事。其一,它向你展示了如何能通过 JobDataMap 向 Job 类传递邮件属性。其二,它描绘了你如何能使用 addJob() 方法去更新一个已部署 Job 的 JobDetailaddJob() 方法有一个布尔型的参数,用来告诉 Scheduler 是否用将要传入的 JobDetail 替换已部署的 JobDetail。Job 名和组必须与 Scheduler 中相匹配,这样才能用新的替换掉旧的。典型的做法是,你的代码会获取到已存在的 Job,然后修改它的 JobDataMap 中的内容,最后重新保存即可。

·更新已存在的 Trigger

你或许也需要更新某个 Job 更新已存在的 Trigger。你能用另一个来替换某个 Trigger,只要它是应用于同一个 Job。你可以通过使用 Scheduler 的 reschedulerJob()  方法来替换某个已有的 Trigger。

Trigger newTrigger = // Create a new Trigger// Replace the old trigger with a new one
sched.rescheduleJob(jobName, Scheduler.DEFAULT_GROUP, newTrigger);

 

·列示出 Scheduler 中的所有 Job

假如你正为 Quartz 构造一个 GUI,你可能需要列出已注册到 Scheduler 的所有 Job。代码 12.9 呈现了这个需求的一个应用。

代码 12.9. 列示出 Scheduler 中的所有 Job 的例子

代码 12.9 中只注册了一个 Job,就是代码 12.7 中的 CheckEmailJob,且演示了如何循环 JobGroups 并罗列出每一个 group 下的所有 Job。在 GUI 中,罗列的结果可以呈现在列表框中或者是下拉列表中。

·列示出 Scheduler 中的所有 Trigger

你也能用类似于代码 12.9 中的方式罗列出所有 Trigger 来。下面的代码看起来十分相似,只是替换为 Trigger 而已。

String[] triggerGroups = sched.getTriggerGroupNames();
int numOfTriggerGroups = triggerGroups.length;
for (i = 0; i < numOfTriggerGroups; i++) {
   System.out.println("Group: "
      + triggerGroups[i]
      + " contains the following triggers");   String[] triggersInGroup = sched.getTriggerNames(triggerGroups[i]);
   int numOfTriggersInGroup = triggersInGroup.length;
   for (j = 0; j < numOfTriggersInGroup; j++) {
      System.out.println("- " + triggersInGroup[j]);
   }
}

 


如果你需要罗列出单个 Job 的所有 Trigger,你可用 Scheduler 的 getTriggersOfJob() 方法。这个方法返回一个与此 Job 相关联的 Trigger[] 数组。

类别: Quartz. 标签: , . 阅读(159). 订阅评论. TrackBack.

Leave a Reply

avatar