[译]Java定时任务调度-Quartz文档(十)Configuration, Resource Usage and SchedulerFactory

来源:互联网 发布:鲁迅 两棵枣树 知乎 编辑:程序博客网 时间:2024/05/21 08:51

Quartz的设计是模块化的,所以要让它跑起来,得将各个模块组合起来使用。幸运的是,有些工具可以来帮我们做这些事。

Quartz的主要模块有:

  • ThreadPool,线程池
  • JobStore,任务仓库
  • DataSources (if necessary),数据源
  • The Scheduler itself,调度器自身

线程池提供了一定数量的任务执行线程。线程池中线程数越多,可以并发的任务数越高。但是过多的线程数会拖垮你的系统。很多使用者发现5个左右的线程数是比较合适的,因为并发的任务数不会超过100。任务通常不是同时启动的,而且通常来说,任务的执行都很快结束。也有人觉得10、15、50甚至100的线程数是比较合适的,因为他们有成千上万的任务需要执行。线程池的线程数量完全取决于你的程序,从整个程序的性能考虑,尽量少的设置线程数,并保证任务能顺利执行,这是唯一的准则。注意当一个触发器被启动时,如果没有可用的现成,那么Quartz将会等待,直到有可用的线程,再继续执行任务。这点有可能引起trigger“哑火”。

线程池的接口定义在org.quartz.spi包中,你也可以创建自己的线程池实现类,Quartz提供了一个简单的线程池实现:org.quartz.simpl.SimpleThreadPool。 这个线程池定义了固定数目的线程数,不会增加,也不会减少。但这个线程池很健壮、稳定,所以几乎所有的用户都使用这个线程池。

JobStores and DataSources 之前有提到过,这里没什么好说的。只有一点,如果Quartz提供的JobStore无法满足需求,你也可以创建自己的JobStore。

最后,你需要创建自己的Scheduler实例。Scheduler实例需要指定名称,配置RMI,关联JobStore and ThreadPool。RMI相关的配置包括是否将Scheduler包装秤一个RMI服务,主机和端口等等。StdSchedulerFactory也可以创建Scheduler实例,本质上是通过RMI远程进程创建的。

StdSchedulerFactory

StdSchedulerFactory是org.quartz.SchedulerFactory接口的一个实现。它使用java的properties文件来创建和初始化Scheduler。properties通常是文件的形式,但也可以通过程序创建并直接传给StdSchedulerFactory。调用StdSchedulerFactory的getScheduler()方法即可创建一个Scheduler。

docs/config中有一些配置的例子,更详细的使用请查阅相关文档。

DirectSchedulerFactory

DirectSchedulerFactory是另一个SchedulerFactory实现。适用于在代码中动态的创建Scheduler实例。一般不推荐使用这种方式,因为:1)这种方式要求使用者很清楚自己在做什么;2)这是一种硬编码的方式,毫无配置性可言。

Logging

Quartz使用SLF4J框架来记录日志。这里超出了本文档的讨论范围。

如果想追踪trigger启动和job执行的信息,可以试试org.quartz.plugins.history.LoggingJobHistoryPlugin和org.quartz.plugins.history.LoggingTriggerHistoryPlugin.

0 0
原创粉丝点击