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

七. 在 quartz_jobs.xml 文件中实现监听器

本章的所有例子告诉了你如何以编程的方式设置监听器。假如我们一个关于在 quartz_jobs.xml 文件中以声明式配置监听器的例子都不提供本章就不能算是完结。

自 Quartz 1.5 开始,你能够在 Job 定义文件中指定监听器,当然就是知名的 quartz_jobs.xml 文件了。代码 7.14 显示了一个使用全局监听器的例子。

代码 7.14. Quartz 监听器能在 quartz_jobs.xml 文件中实现

在代码 7.14 中你看到那个附加的 <job-listener> 元素,它有两个必须的属性:

<job-listener
  class-name="org.cavaness.quartzbook.chapter7.SimpleJobListener"
  name="SimpleJobListener">

class-name 属性标识了监听器类的全限名称。name 属性指派给这个监听器一个逻辑名,在 <job-detail> 元素中用到。

下一步就是为在同一个文件中的每一个要用到监听器的 <job-detail> 元素中定义一个 <job-listener-ref> 元素。该元素的值必须与文件中所定义的其中一个 <job-listener> 元素的 name 属性相匹配。

做完那之后,要确保你已经在 quartz.properties 文件中通过设置属性让 Scheduler 使用了 JobInitializationPlugin。Quartz 插件会在下一章中详细讨论。目前,只要加入以下行到你的 quartz.properties 文件中:

org.quartz.plugin.jobInitializer.class = org.quartz.plugins.xml.JobInitializationPlugin

org.quartz.plugin.jobInitializer.overWriteExistingJobs = true
org.quartz.plugin.jobInitializer.failOnFileNotFound = true
org.quartz.plugin.jobInitializer.validating=false

然后命名你的 XML 文件为 quartz_jobs.xml 并放到你的 classpath 下。

一些需注意的易出错的地方

很有必要提醒你在尝试 XML 文件中设置监听器时很可能会遇到的两个问题。在 Quartz 1.5 中,至少,监听器的的 setName() 方法未包含中接口中。getName() 方法是有的,但不存在相应的 setName()。这在以编程式使用监听器时似乎不会导致什么问题,但是对于声明式时就有问题了。你需要简单的为你的监听器创建一个 setName() 方法。另一个提示就是要确保你的监听器有一个无参构造方法。在某些情况下,Quartz 框架不会在乎,但当以声明式使用它时,你将会得到一个错误。最好还是声明一个无参的构造方法,这样总是安全的。

[译者 Unmi 后记] 配置文件中写成 <start-time>2005-09-13 6:10:00 PM</start-time>,让 Quartz 来解析这个时间字符串可能会出现异常,这在我的一个回复(http://www.blogjava.net/Unmi/archive/2007/11/17/159830.html#210032) 中有论及,现摘录如下:

quart_jobx.xml 中时间格式的问题,写成 2008-06-20 7:23:00 PM 的话 JobSchedulingDataProcessor.parseDate(value) 没办法解析

quarts_jobs.xml<start-time> 的格式是:

<start-time>2008-06-23T21:23:00</start-time>

T隔开日期和时间,默认时区

或者:
<start-time>2008-06-23T21:23:00+08:00</start-time>
+08:00 表示东八区

我觉得这是 Quartz 的一个 Bug,其实 Quartz 在解析时间时准备了两个 Pattern 的,分别是:
yyyy-MM-dd'T'hh:mm:ss
yyyy-MM-dd hh:mm:ss a

但是在 JobSchedulingDataProcessor.parseDate(value) 方法中只会以第一个 Pattern 解析时间,并不会尝试使用第二个 Pattern 去解析时间,第二个 Pattern 是可以认识 2008-06-20 7:23:00 PM 的。

所以为了规避这个问题,还是应该写成 yyyy-MM-dd'T'hh:mm:ss 格式。

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

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

Subscribe
Notify of
guest

0 Comments
Inline Feedbacks
View all comments