六. 使用 FileScanListener
Quartz 框架还包含一个我们未曾提及的监听器。这个监听器不像别的,因为它是为特定目的而设计的:同框架所带的一个工具 Job 一起用的。
这个监听器就是 org.quartz.jobs.FileScanListener 接口,它显式的设计为 FileScanJob 所用的,这一 Job 也在 org.quartz.jobs 包中。FileScanJob 检查某一指定文件的 lastModifiedDate。当某人改变了这个文件,这个 Job 就调用 FileScanListener 的 fileUpdated() 方法。
就像使用其他类型的 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 能访问到它们。
仅有一个特别要注意,容易出错的地方就是要确保添加了一个 FileScanListener 到 SchedulerContext 中。这在代码 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
[版权声明] 本文采用 署名-非商业性使用-相同方式共享 4.0 国际 (CC BY-NC-SA 4.0) 进行许可。