Quartz 概览

Quartz Enterprise Job Scheduler

什么是Quartz作业调度库?

Quartz是一个功能丰富的开源作业调度库,几乎可以集成在任何Java应用程序中 - 从最小的独立应用程序到最大的电子商务系统。Quartz可用于创建简单或复杂的计划,以执行数十,数百甚至数万个作业; 将任务定义为标准Java组件的作业,这些组件可以执行几乎任何可以编程的程序。Quartz Scheduler包含许多企业级功能,例如支持JTA事务和集群。

Quartz可以为做什么?

如果您的应用程序具有需要在给定时刻发生的任务,或者您的系统具有定期维护工作,那么Quartz可能是您理想的解决方案。

使用Quartz进行作业调度的示例:

  • Driving Process Workflow:在最初放置新订单时,将工作安排在2小时内完成,这将检查该订单的状态,并在订单尚未收到订单确认消息时触发警告通知,以及将订单状态更改为 'awaiting intervention'。

  • System Maintenance:安排作业在每个工作日(工作日除节假日之外)晚上11:30将数据库内容转储到XML文件中。

  • 在应用程序中提供提醒服务。

特征

运行时环境

  • Quartz可以嵌入另一个独立的应用程序中

  • Quartz可以在应用程序服务器(或servlet容器)中实例化,并参与XA事务

  • Quartz可以作为独立程序运行(在自己的Java虚拟机中),通过RMI使用

  • Quartz可以实例化为一组独立程序(具有负载平衡和故障转移功能),用于执行作业

作业调度

计划在发生给定触发器时运行作业。可以使用以下指令的几乎任何组合创建触发器:

  • 在一天中的某个时间(到毫秒)

  • 在一周的某些日子里

  • 在这个月的某些日子

  • 在一年中的某些日子

  • 不是在注册日历中列出的某些日子(例如商务假期)

  • 重复了特定次数

  • 重复直到特定的时间/日期

  • 无限期地重复

  • 以延迟间隔重复

作业由其创建者给出名称,也可以组织成命名组。触发器也可以给出名称并放入组中,以便在调度程序中轻松地组织它们。作业可以添加到调度程序一次,但注册了多个触发器。在企业Java环境中,Jobs可以将其工作作为分布式(XA)事务的一部分来执行。

工作执行

  • 作业可以是任何实现简单作业界面的Java类,为作业可以执行的工作留下无限可能。

  • Job类实例可以由Quartz实例化,也可以由应用程序的框架实例化。

  • 发生触发时,调度程序会通知实现JobListener和TriggerListener接口的零个或多个Java对象(侦听器可以是简单的Java对象,EJB,也可以是JMS发布者等)。在Job执行后,也会通知这些侦听器。

  • 当Jobs完成后,它们返回一个JobCompletionCode,它通知调度程序成功或失败。JobCompletionCode还可以根据成功/失败代码指示调度程序应采取的任何操作 - 例如立即重新执行作业。

Job Persistence

  • Quartz的设计包括一个JobStore接口,可以实现该接口以提供各种存储作业的机制。

  • 通过使用包含的JDBCJobStore,配置为“非易失性”的所有作业和触发器都通过JDBC存储在关系数据库中。

  • 使用包含的RAMJobStore,所有作业和触发器都存储在RAM中,因此不会在程序执行之间持续存在 - 但这样做的好处是不需要外部数据库。

Transactions

  • Quartz可以通过使用JobStoreCMT(JDBCJobStore的子类)参与JTA事务。

  • Quartz可以围绕Job的执行来管理JTA事务(开始和提交它们),这样Job执行的工作就会在JTA事务中自动发生。

Clustering

  • 故障转移。

  • 负载均衡。

  • Quartz的内置集群功能依赖于JDBCJobStore的数据库持久性(如上所述)。

  • Quartz的Terracotta扩展提供了集群功能,无需后备数据库。

Listeners & Plug-Ins

  • 应用程序可以捕获调度事件,以通过实现一个或多个侦听器接口来监视或控制作业/触发器行为。

  • 插件机制可用于向Quartz添加功能,例如保留作业执行的历史记录,或从文件加载作业和触发器定义。

  • Quartz附带了许多 "factory built" 的插件和监听器。

你可能感兴趣的:(Quartz 概览)