[译]Java定时任务调度-Quartz文档(十一)Advanced (Enterprise) Features

Clustering

集群特性主要存在于JDBC-Jobstore和TerracottaJobStore。集群特性包括负载均衡和重试。

通过将“org.quartz.jobStore.isClustered”设置为true,可以开启JobStoreTX和JobStoreCMT的集群模式。集群中的所有实例应该共享同一个配置文件。实例自身的配置应该独立于这个配置文件,这些配置包括:线程池的线程数、org.quartz.scheduler.instanceId属性值等等。集群中的实例必须有唯一的实例ID,简单起见,直接将org.quartz.scheduler.instanceId这个设为AUTO就好了。

注:
- 绝不要在多个机器上运行集群模式,除非这些机器使用某个绝对稳定的时间同步服务同步其时间(误差在1秒以内)。更多的参见http://www.boulder.nist.gov/timefreq/service/its.htm
- 非集群的实例之间绝对不要共享数据库表,这样会带来不可预知的问题。

每个任务只会跑在一个实例上。对于重复执行的任务,每次执行都在一个实例上,但是前后的任务会随机跑在实例中。负载均衡的算法就负责如何分配任务到不同的实例,例如那些不太忙的实例,就会多分一些任务给它们。

将Scheduler的JobStore配置为TerracottaJobStore,即可开启TerracottaJobStore的集群模式。企业级的Terracotta版本提供了实例节点选择的更智能化的特性,至于如何搭建Terracotta服务器,特别是用到它的一些特性,例如持久化、HA高可用等等,可以参见:http://www.terracotta.org/quartz

JTA Transactions

正如 Lesson 9: JobStores介绍的,利用JobStoreCMT,Quartz可以支持大规模的分布式事务调度。

将“org.quartz.scheduler.wrapJobExecutionInUserTransaction” 属性设为 “true”,即可开启分布式,设置分布式属性之后,对于所有的任务,在执行之前开始都将打开JTA事务,在execute结束之前提交。
如果想针对单个任务开启分布式特性,在类中加上注解@ExecuteInJTATransaction即可。

Quartz中除了任务的执行使用JTA分布式事务自动的封装外,对Scheduler的调用也使用JobStoreCMT提供了事务的特性。确保执行任务时使用事务,是很明智的。做到这一点,可以直接使用UserTransaction,或者将代码放到使用事务容器管理的SessionBean中即可。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值