quartz集群

三. 配置 Quartz 使用集群

为 Quartz 配置集群环境的步骤比设置类似的 J2EE 集群环境容易的多:

1.  配置每个节点的 quartz.properties 文件。

2.  配置 JDBC JobStore

3.  使用 Scheduler 信息(Job 和 Trigger) 装载数据库。

4.  启动每个 Quartz 节点。

·配置节点的 quartz.properties 文件

就像是运行 Quartz 在非集群环境中那样,每个 Quartz 应用需要一个 quartz.properties 文件。在第三章,“Hello, Quartz” 中提到过,假如你不指定它,会使用默认的 quartz.properties 文件(存在于 quartz.jar 文件中)。最好是指定这个文件,因为你终究是需求修改一个或多个的设置项。

当使用 Quartz 的集群特性,你需要为每个节点修改 quartz.properties 文件。代码 11.1 显示了一个用于集群实例的 quartz.properties 文件的例子。属性将在之后讨论。

代码 11.1. 集群实例的 quartz.properties 文件示例

 
  1. #==============================================================  
  2. #Configure Main Scheduler Properties  
  3. #==============================================================   
  4. org.quartz.scheduler.instanceName = TestScheduler1   
  5. org.quartz.scheduler.instanceId = instance_one  
  6. #==============================================================  
  7. #Configure ThreadPool  
  8. #==============================================================   
  9. org.quartz.threadPool.class = org.quartz.simpl.Simple ThreadPool   
  10. org.quartz.threadPool.threadCount = 5   
  11. org.quartz.threadPool.threadPriority = 5  
  12. #==============================================================  
  13. #Configure JobStore  
  14. #==============================================================   
  15. org.quartz.jobStore.misfireThreshold = 60000   
  16. org.quartz.jobStore.class = org.quartz.impl.jdbcjobstore.JobStoreTX   
  17. org.quartz.jobStore.driverDelegateClass =   
  18. org.quartz.impl.jdbcjobstore.MSSQLDelegate   
  19. org.quartz.jobStore.tablePrefix = QRTZ_   
  20. org.quartz.jobStore.dataSource = myDS   
  21.   
  22. org.quartz.jobStore.isClustered = true  
  23. org.quartz.jobStore.clusterCheckinInterval = 20000  
  24. #==============================================================  
  25. #Non-Managed Configure Datasource  
  26. #==============================================================   
  27. org.quartz.dataSource.myDS.driver = net.sourceforge.jtds.jdbc.Driver   
  28. org.quartz.dataSource.myDS.URL = jdbc:jtds:sqlserver://localhost:1433/quartz   
  29. org.quartz.dataSource.myDS.user = admin   
  30. org.quartz.dataSource.myDS.password = admin   
  31. org.quartz.dataSource.myDS.maxConnections = 10  

#============================================================== #Configure Main Scheduler Properties #============================================================== org.quartz.scheduler.instanceName = TestScheduler1 org.quartz.scheduler.instanceId = instance_one #============================================================== #Configure ThreadPool #============================================================== org.quartz.threadPool.class = org.quartz.simpl.Simple ThreadPool org.quartz.threadPool.threadCount = 5 org.quartz.threadPool.threadPriority = 5 #============================================================== #Configure JobStore #============================================================== org.quartz.jobStore.misfireThreshold = 60000 org.quartz.jobStore.class = org.quartz.impl.jdbcjobstore.JobStoreTX org.quartz.jobStore.driverDelegateClass = org.quartz.impl.jdbcjobstore.MSSQLDelegate org.quartz.jobStore.tablePrefix = QRTZ_ org.quartz.jobStore.dataSource = myDS org.quartz.jobStore.isClustered = true org.quartz.jobStore.clusterCheckinInterval = 20000 #============================================================== #Non-Managed Configure Datasource #============================================================== org.quartz.dataSource.myDS.driver = net.sourceforge.jtds.jdbc.Driver org.quartz.dataSource.myDS.URL = jdbc:jtds:sqlserver://localhost:1433/quartz org.quartz.dataSource.myDS.user = admin org.quartz.dataSource.myDS.password = admin org.quartz.dataSource.myDS.maxConnections = 10
·配置主要的 Scheduler 属性

在这一节中有两个属性应该配置

    ·org.quartz.scheduler.instanceName

    ·org.quartz.scheduler.instanceId

这两属性用于多处,用在 JDBC JobStore 中和数据库来唯一标识实例。

集群时为实例 ID 使用 AUTO

AUTO 为专门为集群准备的。不幸的是,在某些早期的版本,1.4.5 版所用的机制任何情况下都不会清理旧的实例 ID。1.5.1 版中有一些插入式的实例 ID 生成器,其中一个是基于节点的 IP 地址来生成 ID;只要你在一台给定的机器上仅有一个 Quartz 集群节点时这个生成器工作的很好。集群时应当使用 AUTO,因为很多人把 Quartz 放在 EAR 中,分布部署在集群的应用服务器上。这时候,EAR 中必然只有一个 quartz.properties 文件,因此它在所有的节点上是相同的。假如实例 ID 是硬编码的,Quartz 集群将不能正常工作,因为所有的节点有着一样的 ID。AUTO 就是为解决这个问题的。

一些其他严重的集群问题在 Quartz 1.5.1 被引入。如果你需要对 Quartz 集群,你或许该避免这个版本。


·配置 JobStore

为使用 Quartz 的集群,你需要用到 JobStoreTX 或者 JobStoreCMT 作为 Scheduler 的 JobStore。第六章,“Job 存储和持久化” 详细说明了如何设置和使用所提供的这两个 JDBC JobStore。从代码 11.1 中,你能发现和第六章所显示的设置是一样的,还有两个附加的属性:

    ·
org.quartz.jobStore.isClustered

    ·org.quartz.jobStore.clusterChedkinInterval

通过设置 org.quartz.jobStore.isClustered 属性为 true,你就告诉了 Scheduler 实例要它参与到一个集群当中。这一属性会贯穿于调度框架的始终,用于修改集群环境中操作的默认行为。

org.quartz.jobStore.clusterCheckinInterval 属性定义了Scheduler 实例检入到数据库中的频率(毫秒为单位)。Scheduler 检查是否其他的实例到了它们应当检入的时候未检入;这能指出一个失败的 Scheduler 实例,且当前 Scheduler 会以此来接管任何执行失败并可恢复的 Job。通过检入操作,Scheduler 也会更新自身的状态记录。

clusterChedkinInterval 越小,Scheduler 节点检查失败的 Scheduler 实例就越频繁。默认值是 15000 (即15 秒)。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值