请看这个例子。
一个示例Web应用程序在启动时调用`scheduler.start()`。调度程序配置为将其作业存储在数据库中。
该应用程序被复制到了六个Web服务器上。
因此,如果我们启动六个Web服务器,我们将在单个DB上拥有六个具有相同名称的调度程序。如https://quartz-scheduler.org/documentation/quartz-2.1.x/cookbook/MultipleSchedulers中所述:
我的问题是,如果我确定我的所有作业都具有`@DisallowConcurrentExecution`,那么上面的方法是否有效,还是仍然会失败?!
如果`@DisallowConcurrentExecution`无法帮助,我应该手动配置一个服务器来作为主服务器。
有更好的方法吗?!
一个示例Web应用程序在启动时调用`scheduler.start()`。调度程序配置为将其作业存储在数据库中。
该应用程序被复制到了六个Web服务器上。
因此,如果我们启动六个Web服务器,我们将在单个DB上拥有六个具有相同名称的调度程序。如https://quartz-scheduler.org/documentation/quartz-2.1.x/cookbook/MultipleSchedulers中所述:
所以这将失败。不要启动(scheduler.start())非集群实例,它会针对正在运行(start()ed)与相同调度程序名称相同的任何其他实例使用相同的数据库表集。您可能会遇到严重的数据损坏,并且肯定会经历不稳定的行为。
我的问题是,如果我确定我的所有作业都具有`@DisallowConcurrentExecution`,那么上面的方法是否有效,还是仍然会失败?!
如果`@DisallowConcurrentExecution`无法帮助,我应该手动配置一个服务器来作为主服务器。
public class StartUp implements ServletContextListener {
public void contextInitialized(ServletContextEvent event) {
if(THIS_IS_MASTER_TOMCAT){
scheduler.start()
}
}
有更好的方法吗?!