集群Quartz调度程序配置

时间:2013-01-10 13:26:43

标签: java quartz-scheduler

我正在开发一个使用Quartz来调度Jobs的应用程序。要调度的作业是通过读取属性文件以编程方式创建的。我的问题是:如果我有一个包含多个节点的集群,其中哪些节点应该以编程方式创建调度?只有其中一个?或者也许全部?

3 个答案:

答案 0 :(得分:1)

我在网络应用程序中使用过石英,用户除此之外还可以创建执行某些任务的石英作业。

我们在该应用程序上没有遇到任何问题,前提是每个作业的作业名称至少不同。您还可以使用不同的组名,如果我没记错,则jobgroup + jobname组合形成一个作业密钥。

无论如何,我们从不同节点创建运行作业没有问题,但当时石英(大约6个月前,我不相信这已经改变但我不确定)没有提供停止工作的可能性在集群中,它只能在节点上停止执行stop命令的作业。

如果您只想在应用程序启动时创建固定数量的作业,则可以更好地将该作业委派给其中一个节点,因为将从每个节点的相同属性文件中读取作业名称/组,并且冲突会出现。

答案 1 :(得分:0)

你试过在所有这些上创建它们吗?我认为你会因为名字重复而产生冲突。 所以我认为其中一个成员应该在启动期间创建计划。

答案 2 :(得分:0)

如果群集中的预定义属于您所说的属性,那么群集应该只有一个系统调度作业。如果所有系统都这样做,你将不必要地重新创建作业,如果每个服务器都创建或删除相同的作业和触发器,可能会将它们置于奇怪的状态。

您只需将作业的属性部署到一台服务器,然后只有一台服务器会尝试创建它们。

您可以创建一个单独的应用程序,其目的是安排作业并仅运行一次。

如果这些是Web服务器,您可以创建一个简单的安全REST API来触发调度过程。然后,您可以编写一个自动脚本来访问API,并在部署期间或您希望的任何其他时间启动作业计划。如果在负载均衡器后面有多个服务器,则它应该只到一个服务器并安排石英将保存到数据库支持的作业库的作业。群集中的其他节点将在下次从数据库更新时接收它们。