目录
在 Quartz 的集群模式中,确保任务不会重复执行是至关重要的。这一功能主要依靠两个关键机制:数据库锁和记录检查机制。以下是如何结合源码来分析这些机制的详细说明:
1. 数据库锁
Quartz 集群使用数据库来共享作业(Job)和触发器(Trigger)的信息。集群中的每个节点在执行任务之前会在数据库中尝试获取锁。这个锁机制保证了在任意时刻,只有一个节点可以操作特定的触发器。
在 Quartz 的源码中,这种机制主要通过 JobStoreSupport
类的 lockTriggerAccess()
方法来实现。这个方法确保在触发器被访问前锁被正确获取。这个锁通常是基于数据库行锁或某种形式的数据库锁定机制来实现的,具体取决于后端数据库的支持。
2. 记录检查机制
Quartz 集群节点定期执行检查,以确定是否有触发器即将到达其预定执行时间。每个节点都会检查锁定状态以及触发器的下一次执行时间。如果一个节点确定触发器应该被执行,它将尝试获取执行这个触发器的锁。
在 JobStoreSupport
类中的 acquireNextTrigg