(翻译)Quartz官方教程——第十一课:高级(企业)功能

集群

目前集群能够运行在JDBC-Jobstore (JobStoreTX o或者JobStoreCMT) 和TerracottaJobStore中。集群的特性包括负载均衡和故障转移(若是JobDetail的“request recovery”标识被设置为true)。服务器

####经过设置“org.quartz.jobStore.isClustered”属性为true,就能够在JobStoreTX 或者 JobStoreCMT中开启集群模式。集群中的每一个实例都须要使用相同的quartz.properties配置文件。在这些配置文件中有几个能够不一样的属性:线程池的大小以及 “org.quartz.scheduler.instanceId”的值。集群中的每一个节点都必须有一个惟一的实例ID,经过将这个属性设置为“AUTO”能够很容易的完成这件事情(而不须要频繁修改配置文件)。负载均衡

永远不要在不一样的机器上运行集群模式,除非它们的时钟经过某种时间同步服务(守护进程)进行同步(且相互之间的偏差不能超过一秒钟)。若是您不熟悉如何操做,请参阅http://www.boulder.nist.gov/timefreq/service/its.htm。spa

在已经有运行中实例相关联的表上不要再运行新的非集群实例。不然你的数据可能会收到严重的破坏,而且会遇到不稳定的运行结果。线程

每次触发只有一个节点会运行该任务。 个人意思是,若是做业有一个重复的触发器,每隔10秒触发一次,那么在12:00:00,刚好有一个节点将运行该任务,而且在12:00:10,一样只有一个节点将运行......它不必定每次都是同一节点 —— 它或多或少会随机运行它。负载均衡机制对于繁忙的调度器(正在执行多个任务)会近似随机的选择,可是对于活跃的非繁忙的调度器(只有一两个触发)会分配更多的任务。htm

#### 使用TerracottaJobStore进行集群只需将调度程序配置为使用TerracottaJobStore(第9课:JobStores中介绍),而且您的调度程序将所有设置为集群。接口

您可能还想考虑如何设置您的Terracotta服务器,特别是打开诸如持久性等功能的配置选项,以及运行一系列用于HA的Terracotta服务器。进程

TerracottaJobStore的企业版提供了先进的Quartz Where功能,能够将做业智能地定位到适当的集群节点。事务

有关此JobStore和Terracotta的更多信息,请访问http://www.terracotta.org/quartz同步

JTA事务

如第9课:JobStores所述,JobStoreCMT容许Quartz调度操做在较大的JTA事务中执行。it

经过将“org.quartz.scheduler.wrapJobExecutionInUserTransaction”属性设置为“true”,做业也能够在JTA事务(UserTransaction)中执行。经过设置此选项,JTA事务将在任务的execute()方法被调用以前开启,并紧接着执行调用终止后提交。这适用于全部任务。

若是你只想让单个做业被事务包装运行,那么你只须要在任务类上使用@ExecuteInJTATransaction注释。

除了Quartz会将你的任务自动包裹在事务中,在使用JobStoreCMT时,你经过Scheduler接口进行的调用也会参与事务。在调用Scheduler的方法以前,确保你已经开始了一个事务。您能够经过使用UserTransaction直接执行此操做,也能够将使用调度程序的代码放入使用容器管理事务的SessionBean中。

相关文章
相关标签/搜索