我们目前正在评估在我们的项目中使用的quartz-scheduler。对于我们的用例,我们只需要在将来的某个时刻触发一次触发器,它不需要是可重复触发器或 cron 触发器。
因此,在我的 POC 中,我在业务事件发生时创建一个新的简单一次性触发器。我可以看到在集群环境中(使用quartz的JDBC存储),触发器在多个节点之间平衡/分布。
从 POC 中观察到了所需的行为,但是,从性能的角度来看,如果我们每次大规模运行时都创建一个新的一次性触发器,那么成本会是多少。根据我的理解,一个瓶颈是触发器导致数据库膨胀,数据库清理的可能解决方案是添加一个后台任务来清理旧触发器。
我有兴趣了解我们的设计维护调度程序的经验和痛点以及改进设计的任何意见。
最佳答案
您可以安全地使用一次性触发器,它们在触发后将被 Quartz 自动删除。所发生的情况是,Quartz 检查所有触发器并确定这些触发器是否会在将来的某个时刻触发。如果不这样做,Quartz 就会将它们从商店中删除,因为保留它们是没有意义的。
类似的原则也适用于工作。如果作业没有关联的触发器,Quartz 会自动将其从存储中删除,除非该作业的持久性标志设置为 true。
因此,在您的情况下,您可能想要注册一堆持久作业,然后您的应用程序将根据需要为这些作业创建一次性触发器。作业将保留在存储中,完成后触发器将自动清理。
关于java - Quartz 调度程序维护和性能开销,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59999673/