Quartz调度器 - RAM和JDBC作业存储之间有什么区别?

8

我希望在我的应用程序中使用Quartz调度框架。我发现有两种类型的JobStores:

1)RAM Job Store

2)JDBC Job Store

我想知道在哪种情况下应该使用哪种job store,并且它们之间的优缺点是什么。

如果您有任何想法,对我来说都非常有帮助,我非常感激。

2个回答

9

JDBC job store会将触发器和作业的信息保存在数据库中,因此:

  • 如果应用程序在触发器应该触发时宕机(这取决于所选的misfire指令),则不会丢失触发次数

  • 您可以将计划程序设置为集群,其中每个节点都使用相同的数据库

  • JDBC job store的速度较慢

RAM job store仅适用于非集群应用程序,在这种情况下,丢失一个触发并不是很重要。它也更快。如果您想使用RAM job store来使用Quartz,则大多数情况下您根本不需要Quartz。Spring和EJB都提供了运行周期性作业的机制,包括时间和CRON。


所以,如果我可以将作业细节持久化到XML文件中,那么我就可以使用RAMJobStore了。是这样吗? - Narendra
@Narendra:如果你在启动时简单地重新安排所有作业,那么是的。但请记住,如果您的触发器应该每小时运行一次,但您的应用程序关闭了3个小时,这3个触发将在RAM存储中丢失。 - Tomasz Nurkiewicz
谢谢你让我知道。现在我明白了。 - Narendra
如果您要使用带有RAM作业存储的Quartz,很可能您根本不需要Quartz。但在我看来,即使在这种情况下,考虑使用Quartz也是明智的选择:您可以尝试预见未来应用程序的集成,并猜测是否需要JDBC Quartz。如果计划逻辑已经准备好与Quartz一起使用,那么将来与JDBC Quartz的集成就会更容易进行。 - reallynice

3

RAM Job Store非常快,但非常不稳定 - 作业在服务器重启后不会存留。

JDBC Job Store稍微慢一些,但由于作业位于持久化存储中(数据库),它们将在重启后存活下来。

因此,如果您只有短暂的作业计划,并且在服务器重新启动或应用程序重新部署时丢失它们是可以接受的,那么可以使用RAM Job Store。

如果您需要确保在关闭/重启后您的作业仍然存在,那么您应该使用JDBC job store。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接