Quartz教程 第11课 高级(企业级)特性

11课 高级(企业级)特性

11.1 集群

当前的集群需要和JDBCJobstore (JobStoreTXJobStoreCMT)TerracottaJobStore一起工作。这个特定包括负载均衡和job容错(如果JobDetail“请求恢复”标志设置为true的话)

####使能JobStoreTXJobStoreCMT的集群,需要将“org.quartz.jobStore.isClustered”属性设置为true集群中的一个scheduler实例都要使用同一份quartz.properties文件。完全相同的属性文件,可以允许下面的例外:不同的线程池大小,不同的“org.quartz.scheduler.instanceId”属性值。集群中的每一个节点必须具有唯一的instanceId,这很容易实现(不需要不同的属性文件),只需要将这个属性的值设置为AUTO即可。

注意:从来不要在分离的机器上运行集群,除非它们的时钟是同步的,使用一些时间同步服务(守护进程)且运行非常规律(the clocks must be within a second of each other)。如果不知道如何实现,请参见http://www.boulder.nist.gov/timefreq/service/its.htm

从来不要在经被其它实例运行的相同数据表上触发非集群实例。这可能会发生严重数据错误,一定会出现不稳定的行为。

每一次触发,都只有一个节点会触发job。我说的意思是,如果job有一个重复trigger,告诉它每10s触发一次,那么在12:00:00只有一个节点会运行这个job,在12:00:10也只有一个节点会运行这个job,等等。每一次不必是同一个节点:它在哪个节点上运行是随机的。对于忙碌的scheduler(有许多trigger)来说,负载均衡机制几乎是随机的,但是对于不忙碌的scheduler来说,更喜欢用相同的处于active的节点。

####使用TerracottaJobStore的集群,简单配置scheduler使用TerracottaJobStore(第9课 JobStore介绍了),你的scheduler都是用于集群的。

你也想要考虑如何设置Terracotta服务器,尤其是打开特性的配置选项,例如持久化,运行一组Terracotta服务器以实现HA

TerracottaJobStore的企业级版本提供了高级的Quartz Where特性,它允许智能的将job定向到合适的集群节点上。

关于JobStoreTerracotta的更多信息,请访问http://www.terracotta.org/quartz

11.2 JTA事务

如第9课 JobStore介绍的,JobStoreCMT允许Quartz在更大的JTA事务中执行调度操作。

Jobs要想在JTA事务中执行(UserTransaction),要将属性“org.quartz.scheduler.wrapJobExecutionInUserTransaction”设置为true。如果设置了这个属性,在调用Jobexecute方法之前,JTA事务会调用begin()方法,在execute结束之后会才调用commit()方法,适用于所有的Job

如果你想要指定job是否让JTA事务包装它的执行,那么你应该在Job类上使用@ExecuteInJTATransaction注解。

除了Quartz会自动将Job执行包装到事务中,当使用JobStoreCMT时,Scheduler接口上的调用也会参与到事务中。在调用scheduler的方法之前,要确保已经启动了事务。你可以通过使用UserTransaction直接启动,或者将你的代码放到使用容器托管事务的SessionBean中。

 


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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值