? Quartz 学习笔记_牛聚文档

Quartz 学习笔记

Quartz 学习笔记
预览:

2、 2

quartz 源代码的 14个例子非常好,建议分析,执行一下。把 log4j.xml 拷贝到 src/java即可。 CronTrigger 也可以指定一个 Job 类。 0/15表示每 15x 执行一次

Scheduler.start()执行之后,任务才会被真正调度。

同一 Job (fullName 相同的 job )的 JobDataMap 是共享的。 (example4)

round 的 job ,如果上一个 job 还没有执行结束,就需要跳过。需要从 JobDataMap 中获取一 个状态标志 isRunning , 运行结束设为 Idle 并存入 JobDataMap 中。 这样的一个问题是必须多 过一轮才能执行到。 (这样是否可以容忍了?)参考 example5的实现。 haha ,仔细看完 example5之后,原来没那么复杂, quartz 已经做得很好了,只要将 job 实现 StatefulJob 接口 即可,而不是原来的 Job 接口,哈哈。

job fullname的规范:group1.job1

trigger fullname的规则:group1.trigger1

groupname=Task类型

jobname=j+task类名 +job启动时间

triggername=t+task类名 +job启动时间

如果一个 job 执行过程中发生异常,那么我们是否可以控制这种异常了?答:可以。 quartz 提供对 job.execute 执行过程中发生异常的继续处理流程,可以通过 JobExecutionException 来 进 行 控 制 , 比 如 :JobExecutionException e2 = new JobExecutionException(e); e2.refireImmediately(); //重新执行一次 e2.setUnscheduleAllTriggers(true); //让所有触发器都 取消调度

如果一个定时轮询的任务, 运行了一段时间, 你想终止正在调度的任务, 但是又不取消这个 任务 (仅仅终止本次调度, 不影响后续的调度) , 此时该怎么实现 ? 难道要自己写代码检测吗? 答:不用。 quartz 提供了完全解决方案, 你可以通过实现 InterruptableJob 即可。 参考 example7.

如何实现一个每年,每月,每天的任务调度 ? 答:容易, quartz 提供了一系列的 Calendar 来 加入到 Scheduler 的调度日历中即可。

任务结束后, 让和让他回调一个 Listener ?答:容易, quartz 提供了 JobListener , 在 Scheduler 上建立 Listener ,然后将 Listener 与 Job 关联,即能实现事件回调。这样可以做很多任务的 关联,比如 Job1执行结束后,然后将 Job2放入调度器中。参考 example9.

quartz 的更高级特性:可持久化;当 scheduler 负载过大有些 job 可能没有被调度到,此时可 以设置 setRequestsRecovery 来让其可以再被调度。能远程调度、 EJB 、和 jboss 等 app server

第2页/共6页 <上一页下一页>尾页