天天看点

Quartz任务调度(6)schedulerListener分版本超详细解析schedulerListener源码下载

在我们的监听器实现类中,这个类中需实现的方法很多,不需要的可以给出空实现,下面是一些常用的用法:

方法

说明

jobscheduled()

scheduler 在有新的 jobdetail 部署时调用此方法。

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 中重复的问题,数据存储连接的问题。我们可以使用 schedulerexception 的 geterrorcode() 或者 getunderlyingexception() 方法或获取到特定错误的更详尽的信息。

schedulershutdown()

scheduler 调用这个方法用来通知 schedulerlistener scheduler 将要被关闭。

下面是一个1.+版本实例配置:

下面是我们的测试方法,关于方法中没提到的类的配置可参考我前面系列的文章。

运行方法,我们会看到:

一个新的任务被动态添加时执行————schedulerlistener中的方法被调用 任务被部署时被执行————schedulerlistener中的方法被调用 scheduler启动时被执行————schedulerlistener中的方法被调用 trigger 被触发了,此时job 上的 execute() 方法将要被执行 不否决job,正常执行 myjoblistener触发对class tool.job.picknewsjob的开始执行的监听工作,这里可以完成任务前的一些资源准备工作或日志记录 在13:53:18扒取新闻 在13:53:18根据文章的阅读量和评论量来生成我们的最热文章列表 myjoblistener触发对class tool.job.picknewsjob结束执行的监听工作,这里可以进行资源销毁工作或做一些新闻扒取结果的统计工作 trigger 被触发并且完成了 job 的执行,此方法被调用 在13:53:20扒取新闻 任务完成了它的使命,光荣退休时被执行————schedulerlistener中的方法被调用 在13:53:21根据文章的阅读量和评论量来生成我们的最热文章列表

2.+版本与1.+版本的主要区别是新添加了一些方法,并将jobname,groupname参数对换成了jobkey等。

下面是配置实例:

在2.+版本中,我们通过以下方式注册我们的监听器:

其它测试代码可参考我前面系列文章的,测试结果和之前1.+版本内容基本一致