我有几个网络服务器,需要它们才能使用Quartz。 Quartz的集群功能是理想的,但它要求服务器时钟完全同步。他们对此有一个非常可怕的警告:
永远不要在不同的机器上运行群集,除非它们的时钟是使用某种形式的时间同步服务(守护进程)同步的,这种服务非常规律地运行(时钟必须在彼此的秒内)。
我无法保证完整的时钟同步,因此我没有使用群集功能,而是考虑使用单个Quartz实例(具有故障转移的备用)。让单个实例执行作业不是问题,但我仍然需要所有Web服务器都能够安排作业。
我可以直接从Web服务器向JDBCJobStore添加作业,它们是否会被(非集群)Quartz服务器选中?我将通过在Web服务器中创建计划实例来添加作业来实现此目的。这些实例永远不会启动,只是用于访问JobStore。
答案 0 :(得分:2)
编写了一个测试程序,该程序使用与“真实”调度程序(也是非集群)相同的JobStore创建“非集群”Quartz调度程序,并调度作业。几秒钟后,这些工作就会被执行,所以它似乎有效。
更新:我将此问题交叉发布到Quartz论坛和got the answer that this should work。在related question中,他们声明了
可以通过以下方式将作业插入到该数据库中:
1-使用来自另一个过程的石英的rmi特征,并使用石英API
2-在另一个进程(例如webapp)中实例化调度程序,同时将其指向同一个数据库,但不启动()调度程序实例,并使用quartz api调度作业。