【发布时间】:2019-03-26 11:13:34
【问题描述】:
我想知道 Quartz 如何确保集群中只有一个节点运行特定的作业。我知道可以通过在quartz.properties 中设置一些属性来完成,比如JobStoreTX 等,但是支持它的内部实现是什么?
【问题讨论】:
标签: java quartz-scheduler quartz
我想知道 Quartz 如何确保集群中只有一个节点运行特定的作业。我知道可以通过在quartz.properties 中设置一些属性来完成,比如JobStoreTX 等,但是支持它的内部实现是什么?
【问题讨论】:
标签: java quartz-scheduler quartz
quartz中的Clustering是使用数据库完成的,所以如果你的job store是JdbcJobStore那么就会发生clustering。
只有具有相同调度名称和不同 instance_name 的调度程序才能参与并形成集群。
1个ClusterManager线程将用于管理集群。该线程确保lastcheckin时间以设定的时间间隔更新。如果在设定的时间间隔内有任何不匹配,则认为实例已关闭。
2 Quartz 使用标准锁信号量进行 Quartz 实例的数据库级聚类
StdRowLockSemaphore
在此类中,quartz 使用
对行进行悲观锁定select * from {}_Lock for update
如果您在完成触发器触发后检查 JobStoreSupport 类,则将通过完成事务来释放行锁。 因此,如果两个调度程序实例将针对同一个触发器完成,那么只有一个能够成功。
希望这可以帮助您连接点。
【讨论】: