Quartz特点 - Quartz教程
运行环境
- Quartz 可以运行嵌入在另一个独立式应用程序
- Quartz 可以在应用程序服务器(或servlet容器)内被实例化,并且参与XA事务
- Quartz 可以作为一个独立的程序运行(其自己的Java虚拟机内),可以通过RMI使用
- Quartz 可以被实例化,作为独立的项目集群(负载平衡和故障转移功能),用于作业的执行
作业调度
作业被安排在一个给定的触发时运行。触发器可以使用以下指令的接近任何组合来创建:
- 在一天中的某个时间(到毫秒)
- 在一周的某几天
- 在每月的某一天
- 在一年中的某些日期
- 不在注册的日历中列出的特定日期(如商业节假日除外)
- 重复特定次数
- 重复进行,直到一个特定的时间/日期
- 无限重复
- 重复的延迟时间间隔
作业是由其创建者赋予的名字,也可以组织成命名组。触发器也可以给予名称和放置在组中,以方便地将它们调度内组织。作业可以被添加到所述调度器一次,而是具有多个触发器注册。在企业Java环境中,作业可以执行自己的工作作为分布式(XA)事务的一部分。
作业执行
- 作业可以实现简单的作业接口,为作业执行工作的任何Java类。
- Job类的实例可以通过Quartz被实例化,或者通过应用程序框架。
- 当触发时,调度通知实现JobListener和TriggerListener接口零个或多个Java对象(监听器可以是简单的Java对象,或EJB,JMS或发布者等)。这些监听器在作业已经执行之后通知。
- 由于作业完成后返回JobCompletionCode,它通知的成功或失败的调度。JobCompletionCode还可以指示的基础上,成功的话就采取行动调度/失败的代码 - 如立即重新执行作业。
作业持久性
- Quartz的设计包括可被实现以提供的作业存储各种机制一个作业存储接口
- 通过使用包含的JDBCJobStore,所有的作业和触发器配置为“非挥发性”都存储在通过JDBC关系数据库。
- 通过使用包含的RAMJobStore,所有的作业和触发器存储在RAM,因此不计划执行仍然存在 - 但这是无需使用外部数据库的优势。
事务
- 可以参与JTA事务,通过使用JobStoreCMT(JDBCJobStore的子类)。
- Quartz可以管理JTA事务(开始并提交它们)周围作业的执行,从而使作业执行的工作自动将JTA事务中发生。
集群
- 故障切换
- 负载均衡
- Quartz的内置的群集功能,通过JDBCJobStore(如上所述)依靠数据库持久
- Terracotta扩展Quartz提供集群功能,而不需要一个支持数据库
监听器和插件
- 应用程序可以捕捉事件的调度监控或通过实现一个或多个监听器接口控制工作/触发行为。
- 插件机制,可以用来添加功能,Quartz让作业执行过程中或工作负载和触发定义的历史不受限在一个文件中。
- 附带了一些“工厂建有”插件和监听器。