java - quartz 触发器大量创建

标签 java quartz-scheduler

我们的项目属于航空公司领域,我们的系统正在管理航空公司的航类。系统以消息形式从外部源获取航类详细信息,我们的数据库中将始终保留 future 90 天的航类。

我们需要在航类起飞时间前 X 分钟向外部系统发送消息。例如,在航类起飞前 90 分钟,需要向外部系统发送一条消息。一天内的所有航类都需要执行此操作。

我们计划实现该解决方案,例如当航类消息进入我们的系统时,我们将为该航类创建一个 quartz 触发器,以便在起飞时间前 90 分钟发送消息。

但我们面临的问题是每天会有超过300个航类。这意味着系统中一天至少创建 300 个触发器,我们认为这将导致调度程序系统出现性能瓶颈。

请建议是否有更好的替代方案。是否可以通过一个触发器来实现,它会频繁地查询数据库,并对所有满足条件的航类执行发送航类消息的复杂逻辑。

最佳答案

我找到了解决该问题的方法并将其发布在这里,以便其他人可以从中受益。 创建大量 quartz 触发器根本不是一个好主意,我们仅通过两项工作就解决了这个问题。 第一个作业将每天午夜运行一次,它将查找当天的所有航类并计算其消息发送时间。该信息被写入表中。

创建另一个作业,每五分钟运行一次并读取该表并查看当前是否需要发送任何消息以及先前尝试中是否有任何失败的消息。然后它将发送消息并相应地更新状态。

关于java - quartz 触发器大量创建,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61726696/

相关文章:

Java 从我的程序中获取奇怪的文本作为输出

java - 数组循环出现错误

java - Spring Quartz Scheduler Service 要求仅在单个节点上运行,而不是在所有节点上运行

java - Quartz Scheduler - RAM 和 JDBC 作业存储之间的区别是什么

java - Quartz RMI 远程服务器返回无效主机名

java - 安卓工作室 "hidpi=true"不工作

java - 这个递归函数内部发生了什么?

java - 这是使用自定义数据注释的正确方法吗?

java - 来自不同调度作业的同一列版本

quartz-scheduler - 如何手动指定 Quartz JobStoreTX 的数据库连接