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

六. 使用 FileScanListener

Quartz 框架还包含一个我们未曾提及的监听器。这个监听器不像别的,因为它是为特定目的而设计的:同框架所带的一个工具 Job 一起用的。

这个监听器就是 org.quartz.jobs.FileScanListener 接口,它显式的设计为 FileScanJob 所用的,这一 Job 也在 org.quartz.jobs 包中。FileScanJob 检查某一指定文件的 lastModifiedDate。当某人改变了这个文件,这个 Job 就调用 FileScanListenerfileUpdated() 方法。

就像使用其他类型的 Quartz 监听器一样,你必须创建一个实现了 FileScanListener 接口的具体类。只有一个方法需要实现:

public void fileUpdated(String fileName);

代码  7.12 展了了我们的一个极简单的 FileScanListener 实现。

代码 7.12. 一个简单的 FileScanListener 实现

显然,你会想做些更有意义的事情,而不仅仅是写下一条日志信息,但是你从代码 7.12 中的简单例子中明白了要旨。我们也必须在部署 FileScanJob 时为它使用这一新型监听器。代码 7.13 展示了如何部署 FileScanJob

代码 7.13. 部署 FileScanJob

代码 7.13 中的程序像几乎所有别的 必须部署一个 Job 的 Quartz  应用。FileScanJob 需要两个参数:要监视文件的 FILE_NAME,和 FileScanListener(FILE_SCAN_LISTENER_NAME) 的名称。这两个参数的值会存在 JobDataMap 中,因此 FileScanJob 能访问到它们。

仅有一个特别要注意,容易出错的地方就是要确保添加了一个 FileScanListenerSchedulerContext 中。这在代码 7.13 中是通过如下代码片断完成的:

scheduler.getContext().put("SimpleFileScanListener",
     new SimpleFileScanListener());

这一步是必须的,因为 FileScanJob 获取到 SchedulerContext 的引用,然后使用设置到 JobDataMap 中的名称找寻 FileScanListener

jobDataMap.put(FileScanJob.FILE_SCAN_LISTENER_NAME,
     "SimpleFileScanListener");

如果你还有所困惑,别担心:看一看 org.quartz.jobs.FileScanJob 类的源代码吧。这是对待开源软件最好的方式了。

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

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

Subscribe
Notify of
guest

0 Comments
Inline Feedbacks
View all comments