Quartz Job Scheduling Framework[翻译]第七章. 实现 Quartz 监听器 (第四部分)

五. 监听 Scheduler 事件

org.quartz.SchedulerListener 接口包含了一系列的回调方法,它们会在 Scheduler 的生命周期中有关键事件发生时被调用。代码 7.9 列出了包括在 SchedulerListener 接口的方法。

代码 7.9. org.quartz.SchedulerListener 接口中的方法

正如你从代码 7.9 中列示看到的方法那样,SchedulerListener 是在 Scheduler 级别的事件产生时得到通知,不管是增加还是移除 Scheduler 中的 Job,或者是 Scheduler 遭遇到了严重的错误时。那些事件多是关于对 Scheduler 管理的,而不是专注于 Job 或 Trigger 的。

· jobScheduled() 和 jobUnscheduled() 方法

Scheduler 在有新的 JobDetail 部署或卸载时调用这两个中的相应方法。

· triggerFinalized() 方法

当一个 Trigger 来到了再也不会触发的状态时调用这个方法。除非这个 Job 已设置成了持久性,否则它就会从 Scheduler 中移除。

·triggersPaused() 方法

Scheduler 调用这个方法是发生在一个 Trigger 或 Trigger 组被暂停时。假如是 Trigger 组的话,triggerName 参数将为 null。

·triggersResumed() 方法

Scheduler 调用这个方法是发生成一个 Trigger 或 Trigger 组从暂停中恢复时。假如是 Trigger 组的话,triggerName 参数将为 null。

·jobsPaused() 方法

当一个或一组 JobDetail 暂停时调用这个方法。

·jobsResumed() 方法

当一个或一组 Job 从暂停上恢复时调用这个方法。假如是一个 Job 组,jobName 参数将为 null。

·schedulerError() 方法

在 Scheduler 的正常运行期间产生一个严重错误时调用这个方法。错误的类型会各式的,但是下面列举了一些错误例子:

    ·初始化 Job 类的问题

    ·试图去找到下一 Trigger 的问题

    ·JobStore 中重复的问题

    ·数据存储连接的问题

你可以使用 SchedulerExceptiongetErrorCode() 或者 getUnderlyingException() 方法或获取到特定错误的更详尽的信息。

·schedulerShutdown() 方法

Scheduler 调用这个方法用来通知 SchedulerListener Scheduler 将要被关闭。

代码 7.10 展示了一个 SchedulerListener 实现

代码 7.10. 一个简单的 SchedulerListener 实现

和前面的例子一样,代码 7.10 中的 SimpleSchedulerListener 只提供了监听方法的简单实现。代码 7.11 使用了 SimpleSchedulerListener 类。

代码 7.11. 使用 SimpleSchedulerListener

相比于前面的例子,我们在代码 7.11 中作了些小许改动,来实际促使更多的 SchedulerListener 方法被调用。在代码 7.11 中,Scheduler 创建后是在 Job 注册之前被启动的。这就使得在 Job 部署时 jobScheduled() 方法能得到调用。我们也改变了 Trigger 只重复两次而不是无限的运行。这样能强制 triggerFinalized() 方法被调用,因为这个 Trigger 不再有机会触发了。除了这些人为的条件外,使用 SchedulerListener 就和使用 Job 或 Trigger 监听器是一样的了。

本文链接 https://yanbin.blog/quartz-job-scheduling-framework-7-4/, 来自 隔叶黄莺 Yanbin Blog

[版权声明] Creative Commons License 本文采用 署名-非商业性使用-相同方式共享 4.0 国际 (CC BY-NC-SA 4.0) 进行许可。

Subscribe
Notify of
guest

1 Comment
Inline Feedbacks
View all comments
huanghun
huanghun
10 years ago

"我们也改变了 Trigger 只重复两次而不是无限的运行"
哪里有设置只重复两次啊?