[译]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.
- [译]Java定时任务调度-Quartz文档(十)Configuration, Resource Usage and SchedulerFactory
- Quartz.NET教程_Lesson 10: Configuration, Resource Usage and SchedulerFactory
- Quartz学习之Lesson10-Configuration, Resource Usage and SchedulerFactory
- Quartz 框架 教程(中文版)2.2.x 之第十课:Configuration,Resource Usage和SchedulerFactory
- [译]Java定时任务调度-Quartz文档(七)TriggerListeners and JobListeners
- [译]Java定时任务调度-Quartz文档(五)SimpleTrigger
- [译]Java定时任务调度-Quartz文档(二)Quartz API、Job & Scheduler
- [译]Java定时任务调度-Quartz文档(十二)Miscellaneous Features of Quartz
- [译]Java定时任务调度-Quartz文档(一)初步使用
- [译]Java定时任务调度-Quartz文档(三)进一步讲讲Job和Job Detail
- [译]Java定时任务调度-Quartz文档(四)More About Triggers
- [译]Java定时任务调度-Quartz文档(九)Job Stores
- [译]Java定时任务调度-Quartz文档(十一)Advanced (Enterprise) Features
- [译]Java定时任务调度-Quartz Cron 调度
- Quartz 定时任务调度
- quartz定时任务调度
- Quartz定时任务调度
- Java定时任务调度之Quartz
- 数据结构与算法分析(第3版)练习题-第1章-引论
- Webscan360的防御与绕过
- Unable to list target platforms. When I try to build to Andriod on Mac
- 解决Eclipse中无法查看Java源码
- 自定义CheckBox
- [译]Java定时任务调度-Quartz文档(十)Configuration, Resource Usage and SchedulerFactory
- ref使用
- js中==与===的区别
- php根据时间戳获取今天,昨天,周几,几月几号的时间形式
- Python修改文件权限
- 面试技巧及注意事项
- LeetCode:507. Perfect Number
- 盈鹏飞嵌入式-EVB-T335(AM335) debian系统USB无线网卡移植手册
- Thinkphp框架任意代码执行漏洞利用及修复