1

我们的应用程序部署到 2 个 Web 服务器以实现负载平衡和冗余。我们有几个每天运行一次的 Quartz 作业。该作业只需要在其中一个 Web 服务器上执行,而不是同时在两个服务器上执行。最终,我们可能会将这些作业移动到作业服务器,但现在,有没有办法通过配置或环境变量或我可以做的事情让这些作业只在我的一台服务器上运行?

4

1 回答 1

1

您可以在QuartzConfig.groovy特定环境中启用或禁用 Quartz 插件。

environments {
    runQuartz {
        autoStartup = true
    }
    dontRunQuartz {
        autoStartup = false
    }
}

所以一种方法是在你的Tomcat启动参数中使用-Dgrails.env=runQuartz和。-Dgrails.env=dontRunQuartz

一个可怕的 hack 是让您的 Quartz Job 尝试锁定一个共享数据库表 - 获得锁定的作业可以运行,否则,中止。

我认为第三种选择是使用 JDBC 作业存储,尽管我没有使用它的经验。在Quartz 插件文档中简要提到。

于 2012-11-19T20:26:03.370 回答