Quartz 2.3.2 org.quartz.jobStore.isClustered
所属分类 quartz
浏览量 43
在Quartz多实例环境中,每个实例是否执行相同的任务取决于具体的配置和实现方式。
在集群环境中,多个Scheduler实例共享同一个数据源,通过数据库表来协调任务的执行,
这意味着每个实例都会定期检查数据库中的任务状态,并根据需要触发任务。
如果配置不当或未使用适当的控制并发机制,可能会导致多个实例同时执行同一任务。
为了避免这种情况,可以使用分布式锁或其他并发控制策略来确保同一任务只由一个实例执行。
此外,Quartz支持通过设置属性来控制是否允许多个实例同时执行同一个作业。
在 Quartz 2.3.2
org.quartz.jobStore.isClustered 用于配置调度器(Scheduler)是否在一个集群环境中运行
false: 当设置为 false 时,Quartz 调度器将不会尝试去参与任何集群活动。
这意味着即使有多个调度器实例运行在同一数据库上,它们也不会相互通信或协调作业(job)和触发器(trigger)的执行。
每个调度器实例会独立地尝试获取并执行它认为应该运行的任务,这可能导致同一任务被多个实例重复执行。
true: 当设置为 true 时,Quartz 调度器将参与到集群中。
所有标记为集群的调度器实例将共享同一个数据库中的作业存储(JobStore)。
这些实例会互相通信以确保一个特定的作业不会同时被多个节点执行。
集群中的每个调度器实例都会定期检查是否有其他实例失败,并接管那些本应由失败实例执行的任务。
这样可以保证即使某些节点不可用,任务仍然能够被执行,并且避免了任务的重复执行。
因此,在生产环境中,如果有一个以上的调度器实例并且希望它们协同工作,应该将 isClustered 设置为 true
此外,为了使集群正常工作,
需要确保所有调度器实例使用相同的
调度器名称(org.quartz.scheduler.instanceName)和 不同的实例 ID(org.quartz.scheduler.instanceId),
并且正确配置了持久化的 JobStore(例如 JobStoreTX 或 JobStoreCMT),以便所有实例都能访问同一个数据源。
当设置为 true 时,Quartz 会启用集群特性,允许多个调度器实例共享同一个数据库来协调任务调度。
这包括异常恢复、任务转移等功能,确保在某个节点失败时,其他节点可以接管其任务。
每个节点必须有唯一的 instanceId,通常设置为 AUTO 即可自动生成。
当设置为 false 时,Quartz 不启用集群特性,每个调度器实例独立运行,互不干扰。
这种模式下没有集群管理线程,因此没有异常恢复和任务转移等功能。
isClustered = true 适用于需要高可用性和负载均衡的分布式环境,
而 isClustered = false 则适用于单机或不需要集群特性的场景
上一篇
下一篇
毛主席诗词
mysql 到 mysql 全量增量 同步
《毛选》与交易
毛主席的诗词人生
毛主席名句
毛主席语录最经典50句