【发布时间】:2023-04-02 04:26:01
【问题描述】:
我在负载均衡器后面有一层相同的应用服务器。出于操作原因,我有两个应用程序服务器上的应用程序配置必须相同的约束,以便可以轻松添加和删除节点。所有应用服务器共享同一个数据库。应用服务器不会/不会被集群化。
到目前为止,这一直运行良好,但现在我希望有一个在其中一个应用服务器上执行的计划作业。所有应用服务器都将运行 Quartz 并具有相同的运行作业时间表。触发器将在每个应用服务器上触发,但我希望只有一个应用服务器实际执行该作业 - 基本上它们都竞相启动并且只有一个实际启动,其余应用服务器只是忽略该作业。这里的想法是,如果我们失去了一个应用服务器,另一个将运行该作业,如果我们添加新的应用服务器,它们将轮流运行作业。
我计划通过在数据库中创建一个“作业锁定”表来实现此目的,所有应用服务器都会在开始作业之前读取该表,并且仅在作业“解锁”时才开始。首先对表进行更新的应用服务器实际上会通过将表更新为运行状态/在作业结束时将其重置来阻止其他服务器。
在我构建这个之前,我很感谢那些对 Quartz 有更多经验的人的一些意见:
a) 我可以将这种行为与 Quartz 挂钩,这样就不必在每个作业的基础上完成它了吗? IE。开发人员可以添加新作业,而不必担心作业锁定,因为它被抽象掉了。
b) Quartz 是否提供任何内置机制来实现与上述类似的功能,这样我就不必自己动手了?
谢谢!
【问题讨论】:
标签: java quartz-scheduler