Quartz 框架 教程(中文版)2.2.x 之第十课:Configuration,Resource Usage和SchedulerFactory

原文地址:http://www.quartz-scheduler.org/documentation/quartz-2.2.x/tutorials/tutorial-lesson-10

 

第十课:Configuration,Resource Usage和SchedulerFactory

         Quartz框架的结构是模块化的,因此它运行的几个组件需要“咬合”在一起。幸运的是,一些帮助类可以完成这些工作。

       在Quartz可以工作之前需要配置的几个主要组件:

·        ThreadPool

·        JobStore

·        DataSources (if necessary)

·        The Scheduler itself

         ThreadPool提供一组线程给Quartz执行作业任务时使用。池里有越多的线程,能并发执行的作业任务数量就越多。然而,太多的线程可能会导致系统挂死。大多数Quartz用户发现大约5个线程是比较合适的——在任何时候作业任务数都小于100,所有的作业任务一般不会在同一个时间被调度,并且作业任务生命周期短(很快就能完成)。其他人认为他们需要101550甚至100个线程——他们有成千上万个触发器用于各种各样的调度——最后在任何时候都是平均在10100个作业任务同时执行。寻求调度线程池正确的大小完全依赖于你使用什么样的调度。这里没有固定的规则,而是保留尽可能少的线程浸透(为了你的计算资源)——但是要确保有足够的线程让作业任务准时起动。注意如果触发器要触发的时间到了,但是没有可用的线程,Quartz会让该触发器阻塞直到有可用的线程,然后作业任务才会执行——这样会比本应该执行的时间延迟几毫秒。这里有可能会导致触发失败——如果在Quartz配置的“misfire threshold”期间一直没有可用的线程。

         ThreadPool接口在包org.quartz.spi内定义,你可以用任何方式创建ThreadPool的实现类。Quartz附带了一个简单的线程池名为org.quartz.simpl.SimpleThreadPool(但是也能满足需要)。这个线程池简单包含固定数量的线程数——不会增加,也不会减少。但是它在其他方面特别健壮,并且经过很好的测试——几乎每个使用Quartz的人都用这个线程池。

         JobStores和数据源在教程中的第九课讨论过。这里需要注意,事实上所有的JobStores都实现org.quartz.spi.JobStore接口,如果这些JobStores没有一个适合你的需要,你可以自行开发一个。

       最后,你需要创建一个调度器实例。该实例需要指定一个名字,告知它RIM的设置和持有的JobStoreThreadPool实例。RMI设置包括调度器是否作为RMI服务对象(设置允许远程连接),并设置连接的主机名和端口号等。StdSchedulerFactory(下面将讨论)也可以产生调度器实例,实际上是代理RMI端在远程进程中创建调度器实例。

 

StdSchedulerFactory

         StdSchedulerFactoryorg.quartz.SchedulerFactory接口的实现类。它使用一组参数(java.util.Properties)来创建和初始化Quartz调度器。这些参数一般存储在文件中,并且从文件中加载,也可以直接在程序中创建直接赋值给工厂类。在工厂类中简单地调用getScheduler方法就能创建和初始化调度器对象(包括它的ThreadPoolJobStore和数据源),并返回一个引用(也叫句柄)到它的公共接口。

       在Quartz发布包的“docs/config”目录里有一些示例配置(包含参数说明)。你可以在Quartz文档的参考板块下的配置手册里找到完整的文档。

 

DirectSchedulerFactory

         DirectSchedulerFactory是另一个SchedulerFactory实现类,它适用于希望用更多的编程方式创建调度器实例。一般不鼓励使用它主要有以下原因:(1)它要求使用都对他们想做的事情有比较深的理解,(2)它不允许声明式配置,换句话说,你必须编写代码来完成调度器的所有参数设置。

Logging

         Quartz选用SLF4J框架来满足所有的日志需求。为了“调整”日志设置(例如日志输出量,日志输出位置),你需要去了解SLF4J框架,这个框架不在此文档内。

    如果你想了解触发器触发和作业任务执行的额外信息,你可能会对org.quartz.plugins.history.LoggingJobHistoryPlugin和/或org.quartz.plugins.history.LoggingTriggerHistoryPlugin感兴趣。

 

你可能感兴趣的:(框架,quartz,教程)