Quartz org.quartz.jobStore.selectWithLockSQL行锁

Cri*_*ris 13 spring weblogic quartz-scheduler

我在集群模式下使用Quartz

由于过度调用导致数据库级别出现一些行锁争用:

org.quartz.jobStore.selectWithLockSQL

"SELECT*FROM QRTZ_LOCKS WHERE SCHED_NAME =:"SYS_B_0"AND LOCK_NAME =:1 FOR FORDDATE"

我读石英文档,但我仍然不清楚为什么执行上面的查询.

这个行锁的目的是什么?

问候

Mar*_*ios 6

在集群模式下部署时,quartz 使用锁表来协调多个调度程序。在集群中,只有一个节点应该触发触发器,因此使用锁来避免多个节点获取相同的触发器。

从文档的聚类部分(http://quartz-scheduler.org/generated/2.2.1/html/qs-all/#page/Quartz_Scheduler_Documentation_Set%2Fre-cls_cluster_configuration.html%23):

集群目前仅适用于 JDBC-Jobstore(JobStoreTX 或 JobStoreCMT),并且本质上通过让集群的每个节点共享相同的数据库来工作。负载平衡会自动发生,集群的每个节点都尽可能快地触发作业。当触发器的触发时间发生时,第一个获取它(通过在其上放置锁)的节点是将触发它的节点。

  • 我有一个类似的问题。我理解查询背后的逻辑,但我也不明白为什么它被执行了这么多次。就我而言,对于计划每 10 分钟运行一次的作业,查询每小时执行超过 11000 次!你得出什么结论了吗? (5认同)