我有一个在两个不同实例上运行的 Spring Web 应用程序。这两个实例彼此不知道,它们在不同的服务器上运行。
该应用程序有一个预定的 Quartz 作业,但我的问题是该作业不应该在实例上同时执行,因为它是一个邮件发送作业,它可能会导致发送重复的电子邮件。
我正在使用 RAMJobStore,而 JDBCJobStore 对我来说不是一个选项,因为它需要大量表。(由于内部限制,我无法创建许多表)
我想到的解决方案: -创建一个控制表,每次作业开始时都必须检查(具有可重复的读取隔离级别以避免并发问题)问题是如果服务器被杀死,表可能会留在无效状态。
- 使用属性将单个服务器定义为作业运行服务器。问题是如果该服务器出现故障,作业将停止运行
有没有人遇到过这个问题,你有什么想法可以分享吗?