石英如何确保只有一个节点可以运行作业

时间:2019-03-26 11:13:34

标签: java quartz-scheduler quartz

我想知道Quartz如何确保集群中只有一个节点运行特定作业。我知道可以通过在quartz.properties中设置一些属性(例如JobStoreTX等)来完成,但是支持它的内部实现是什么?

1 个答案:

答案 0 :(得分:1)

石英数据库中的集群是使用数据库完成的,因此,如果您的工作存储是JdbcJobStore,则将发生集群。

只有具有相同调度名称和不同instance_name的调度器才能参与并形成集群。

将使用1个ClusterManager线程来管理集群。该线程确保上次签入时间按设置的间隔进行更新。如果在该设置的间隔中存在任何不匹配,实例将被视为已关闭。

2 Quartz使用standardlocksemaphore进行石英实例的数据库级集群

StdRowLockSemaphore

在此类中,石英使用

对行进行悲观锁定
select * from {}_Lock for update 

如果在完成触发触发器后检查JobStoreSupport类,则将通过完成事务来释放行锁。 因此,如果两个调度程序实例将针对同一触发器完成,那么只有一个能够成功。

希望这可以帮助您连接点。