转载

【Quartz指南】高级(企业)特性

集群

目前集群仅以JDBC-Jobstore (JobStoreTX or JobStoreCMT)工作。这些特性包含load-balancing和任务fail-over(如果JobDetail的"request recovery"标志设为true的话)。 通过设置org.quartz.jobStore.isClustered属性为“true”来使用集群。在集群里的每个调度器实例应该用一样的quartz.properties文件。集群会有如下异常:线程池大小不同,属性org.quartz.scheduler.instanceName值不同。其实在集群的每个节点都有一个唯一的实例ID,要达到这样也很简单,也不需要不同的属性文件,只要将属性org.quartz.scheduler.instanceId的值设置为“AUTO”。 不要在一个分离开的机器上运行集群,除非他们的时钟是用时钟同步服务同步过的。如果不熟悉怎样同步,参考:http://www.boulder.nist.gov/timefreq/service/its.htm 其他调度器实例在用数据表时,不要触发一个也用到这些数据表的不是集群的调度器实例。你会得到一些没用的数据。  

JTA 事务

在第9节解释过JobStores,JobStoreCMT允许Quartz调度一些具有很大JTA事务的操作。 通过设置“org.quartz.scheduler.wrapJobExecutionInUserTransaction”属性为true,Jobs也能够在一个JTA事务里执行。有了这个设置,一个JTA事务会在job的execute()方法调用前开始(begin),然后在调用execute()方法结束后提交(commit)。 除了在JTA事务里Quartz自动地和job的执行挂钩之外,当使用JobStoreCMT时也可以调用你在调度器接口里的实现的方法,确保你在调用一个调度器上的方法之前开始了事务。你也可以直接自己做,使用UserTransaction,或者把用了调度器的代码放在一个使用容器的SessionBean里来管理事务。
正文到此结束
Loading...