请考虑这个例子。
一个示例Web应用程序要求scheduler.start()其启动。调度程序配置为将其作业存储在DB中。
该应用程序被复制到六个Web服务器上。
因此,如果启动六个Web服务器,则在单个DB上将有六个具有相同名称的调度程序。如https://quartz-scheduler.org/documentation/quartz-2.1.x/cookbook/MultipleSchedulers中所述:
切勿针对运行(start()ed)具有相同调度程序名称的任何其他实例的同一组数据库表启动(scheduler.start())非集群实例。您可能会遇到严重的数据损坏,并且肯定会遇到不稳定的行为。
因此,这将失败。
我的问题是,如果我确定我所有的工作@DisallowConcurrentExecution都会胜任工作,否则仍然失败?
如果@DisallowConcurrentExecution没有帮助,我应该手动将一台服务器配置为某些主机
public class StartUp implements ServletContextListener {
public void contextInitialized(ServletContextEvent event) {
if(THIS_IS_MASTER_TOMCAT){
scheduler.start()
}
}
Run Code Online (Sandbox Code Playgroud)
有更好的方法吗?