我有一个在两个不同实例上运行的Spring Web应用程序。
这两个实例彼此不知道,它们在不同的服务器上运行。

该应用程序具有计划的Quartz作业,但是我的问题是该作业不应在实例上同时执行,因为它的邮件发送作业可能会导致重复发送电子邮件。

我正在使用RAMJobStore,但由于需要大量表,因此对我来说不是JDBCJobStore(由于内部限制,我无法创建许多表)

我想到的解决方案:
-创建单个控制表,每次作业启动时都必须检查该表(具有可重复的读取隔离级别,以避免并发问题)问题是,如果服务器被杀死,则该表可能处于无效状态。

-使用属性将单个服务器定义为作业运行服务器。问题是,如果该服务器关闭,作业将停止运行

有没有人遇到过这个问题,您有什么想法要分享吗?

最佳答案

从第二种解决方案开始(在一个节点上禁用所有节点上的qartz)。这非常简单而且安全。计算服务器关闭的频率。如果不可接受,请尝试第一种解决方案。第一个解决方案的问题是,您需要具备多线程编程方面的良好技能才能实现无错误的代码。如果多线程不是您的日常任务,那不是那么简单。实现中的一些错误的成本可能大于实际利润。

07-24 19:55
查看更多