我可以在没有启用集群的情况下将新作业注入Quartz JDBCJobStore吗?

时间:2009-11-22 01:36:27

标签: quartz-scheduler cluster-computing

我有几个网络服务器,需要它们才能使用Quartz。 Quartz的集群功能是理想的,但它要求服务器时钟完全同步。他们对此有一个非常可怕的警告:

  

永远不要在不同的机器上运行群集,除非它们的时钟是使用某种形式的时间同步服务(守护进程)同步的,这种服务非常规律地运行(时钟必须在彼此的秒内)。

我无法保证完整的时钟同步,因此我没有使用群集功能,而是考虑使用单个Quartz实例(具有故障转移的备用)。让单个实例执行作业不是问题,但我仍然需要所有Web服务器都能够安排作业。

我可以直接从Web服务器向JDBCJobStore添加作业,它们是否会被(非集群)Quartz服务器选中?我将通过在Web服务器中创建计划实例来添加作业来实现此目的。这些实例永远不会启动,只是用于访问JobStore。

1 个答案:

答案 0 :(得分:2)

编写了一个测试程序,该程序使用与“真实”调度程序(也是非集群)相同的JobStore创建“非集群”Quartz调度程序,并调度作业。几秒钟后,这些工作就会被执行,所以它似乎有效。

更新:我将此问题交叉发布到Quartz论坛和got the answer that this should work。在related question中,他们声明了

  

可以通过以下方式将作业插入到该​​数据库中:

     

1-使用来自另一个过程的石英的rmi特征,并使用石英API

     

2-在另一个进程(例如webapp)中实例化调度程序,同时将其指向同一个数据库,但不启动()调度程序实例,并使用quartz api调度作业。