`

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 文件示例




#==============================================================  
#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  

C#代码
#============================================================== 
#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 
#==============================================================
#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 秒)。


分享到:
评论

相关推荐

    quartz集群调度机制调研及源码分析

    4. 高可用性与容错:由于Quartz集群使用数据库来共享状态信息,如果某个节点失败,其他节点可以接管失败节点的任务,确保任务的高可用性。同时,由于任务在多个节点之间分布,即使一个节点出现问题也不会影响整个...

    spring4.0.6+quartz 2.2.3 集群示例

    8. **监控和管理**: 可以使用Quartz提供的Web管理界面`Admin Console`或自定义监控工具来查看集群状态,管理和调试作业。 集群的关键在于数据一致性,每个节点需要同步作业和触发器的状态,这通常通过共享存储(如...

    quartz 集群解决方法

    为了便于监控和管理Quartz集群,可以使用Web管理界面如`QuartzAdmin`或者通过API接口获取集群状态和任务信息。 9. **源码阅读**: 对于深入理解Quartz集群的工作原理,阅读源码是一个很好的途径。了解`Cluster...

    SpringBoot 整合Quartz(集群)实现定时任务调度

    对于集群环境,还需要设置`org.quartz.scheduler.instanceName`和`org.quartz.jobStore.isClustered`为集群模式: ```properties # application.properties 示例 quartz.jobStore.tablePrefix=QRTZ_ quartz....

    quartz在集群环境下的最终解决方案

    ### quartz在集群环境下的最终解决方案 #### 背景与挑战 随着系统复杂度的提高以及业务需求的变化,越来越多的应用程序需要支持高可用性和可扩展性。为了满足这些需求,通常会选择将应用程序部署在集群环境中。...

    spring3+quartz1.6.4 集群示例

    在Quartz集群中,多个Quartz服务器节点共享同一个作业和触发器的信息,当一个节点失败时,其他节点可以接管任务执行,确保服务的连续性。Quartz使用数据库存储作业和触发器的状态,实现集群间的同步。 4. **Spring...

    Quartz2.2.1和Spring3.1.1集群

    在Java世界中,Quartz是广泛使用的任务调度工具。版本2.2.1是一个稳定且功能丰富的更新,提供了许多改进和新特性。 Spring则是一个全面的企业级应用开发框架,提供依赖注入、面向切面编程、数据访问、事务管理等...

    quartz集群Sql大放送

    在设置Quartz集群时,确保所有节点都使用相同的表结构和数据是关键。 而对于Oracle数据库,由于其特性和SQL语法的差异,初始化脚本会有所不同。Oracle用户需要运行特定于Oracle的脚本来创建相应的Quartz表,并可能...

    spring quartz集群配置

    在Quartz集群中,多个Quartz服务器共享同一个“作业存储”(Job Store),这个存储可以是关系数据库或者分布式的存储系统。当一个服务器触发一个作业时,其他服务器会看到这个作业已经被触发,因此不会重复执行。这...

    spring quartz 集群模式

    Quartz集群通过共享内存中的状态来实现任务的分配和执行,当一个节点失败时,其他节点能够接管未完成的任务。实现Quartz集群,需要配置多个Quartz服务器共享同一份数据库存储,用于保存Job、Trigger以及运行状态等...

    quartz集群完整应用实例

    本篇将基于"quartz集群完整应用实例"来深入探讨Quartz的集群配置与实现。 Quartz的核心概念包括Job(任务)、Trigger(触发器)和Scheduler(调度器)。Job是执行的具体任务,Trigger定义了任务何时运行,而...

    quartz+spring分布式集群调度

    3. **监控和管理**: 实现对Quartz集群的监控,如任务状态、运行时性能等,以便及时发现和解决问题。 总结,Quartz+Spring的分布式集群调度方案能够帮助开发者构建稳定且可扩展的定时任务系统。通过合理配置和实践,...

    spring+quartz定时集群支持

    至于数据库,Quartz集群需要一个共享的数据库存储job和trigger的信息,这就是`dbTables`文件所涉及的内容。Quartz会在数据库中创建一系列的表,用于存储任务元数据,如job信息、trigger信息等。这些表的设计和初始化...

    Springboot集成quartz集群

    本文章是关于springboot集成quartz集群的步骤,LZ亲测。

    SSH框架+Quartz集群

    在实际应用中,可能会使用如ZooKeeper这样的分布式协调服务来帮助Quartz集群管理状态。 在压缩包文件"oa_ssh"中,可能包含了项目的所有源代码、配置文件、数据库脚本等资源,开发者可以通过这些文件了解和学习SSH...

    spring集成quartz集群配置

    在IT行业中,Spring框架是Java应用开发中的基石,而Quartz则是广泛...通过上述步骤,你已经掌握了Spring集成Quartz集群配置的基本概念。在实践中,根据具体需求调整配置,可以实现高效、稳定且可扩展的任务调度系统。

    spring boot quartz集群实现

    一个基于springboot的quartz集群dome。 向http://localhost:9090/job/addjob注入3个参数 类名:(及时定时任务的类如:com.ybjdw.site.job.NewJob) 组名:随意 定时启动方法:如“0/3 * * * * ?”(每3秒启动一次...

    Spring整合quartz2.2.3总结,quartz动态定时任务,Quartz定时任务集群配置

    2. 配置Scheduler:在Spring的配置文件中,使用`SchedulerFactoryBean`来初始化和配置Quartz Scheduler。可以设置如数据库存储、线程池大小等参数。 3. 创建Job类:定义一个实现了`org.quartz.Job`接口的类,这是...

    Quartz集群配置源码和可执行脚本

    Quartz集群配置是一项重要的技术,它可以确保在多个服务器之间分布任务,提高系统的可用性和容错性。集群模式下,如果一个节点失败,其他节点可以接管工作,保持服务的连续性。 在Quartz集群配置中,主要涉及以下几...

Global site tag (gtag.js) - Google Analytics