我有一个可在2台不同机器上运行的webapp。从webapp可以“按顺序”在石英的特定时间执行作业。 quartz在webapp中运行。因此石英在两台机器中的每一台上运行。 我正在使用JDBC数据存储来保存作业,触发器等。
然而,这个想法是只有一台机器会运行工作而另一台机器只会使用石英来安排工作。因此,调度程序只能在其中一台机器上启动(scheduler.start())。
在文档中说
永远不要在不同的计算机上运行群集,除非使用某种形式的时间同步服务(守护程序)同步它们的时钟,这些服务定期运行(时钟必须在彼此的秒内)。如果您不熟悉如何执行此操作,请参阅http://www.boulder.nist.gov/timefreq/service/its.htm。
永远不要针对与任何其他实例正在运行(start()ed)的同一组数据库表启动(scheduler.start())非群集实例。您可能会遇到严重的数据损坏,并且肯定会遇到不稳定的行为。
我不确定运行我的webapp的两台机器是否同步了它们的时钟。
我的问题是:当只有一个石英实例启动并运行作业时,我仍然应该在集群模式下运行石英进行此设置,而另一个实例仅用于调度第一个实例执行的作业。
答案 0 :(得分:1)
如果只在一个节点上启动调度程序并在另一台机器上远程访问它呢?您可以使用RMI / JMX计划作业。或者您可以使用RemoteScheduler
适配器。
基本上,没有两个集群调度程序,其中一个正在工作,另一个只访问共享数据库,您只有一个调度程序(服务器),您可以从另一台计算机访问它,调度和监视通过API工作。
答案 1 :(得分:0)
如果你永远不会在第二个节点上调用start()方法,那么你就不必担心时钟同步。
但是,您需要将isClustered config prop设置为true,以确保在两个节点插入/更新/删除数据时使用基于表的锁定。