【发布时间】:2012-11-19 19:59:51
【问题描述】:
我们的应用程序部署到 2 个 Web 服务器以实现负载平衡和冗余。我们有几个每天运行一次的 Quartz 作业。该作业只需要在其中一个 Web 服务器上执行,而不是同时在两个服务器上执行。最终,我们可能会将这些作业转移到作业服务器上,但现在,有没有办法通过配置或环境变量或我可以做的其他方式使作业仅在我的一台服务器上运行?
【问题讨论】:
标签: grails tomcat6 quartz-scheduler
我们的应用程序部署到 2 个 Web 服务器以实现负载平衡和冗余。我们有几个每天运行一次的 Quartz 作业。该作业只需要在其中一个 Web 服务器上执行,而不是同时在两个服务器上执行。最终,我们可能会将这些作业转移到作业服务器上,但现在,有没有办法通过配置或环境变量或我可以做的其他方式使作业仅在我的一台服务器上运行?
【问题讨论】:
标签: grails tomcat6 quartz-scheduler
在QuartzConfig.groovy 中,您可以为特定环境启用或禁用 Quartz 插件。
environments {
runQuartz {
autoStartup = true
}
dontRunQuartz {
autoStartup = false
}
}
所以一种方法是在 Tomcat 启动参数中使用 -Dgrails.env=runQuartz 和 -Dgrails.env=dontRunQuartz。
让你的 Quartz Job 尝试锁定一个共享数据库表是一个可怕的 hack - 获得锁定的作业可以运行,否则,中止。
我认为第三种选择是使用 JDBC 作业存储,尽管我没有使用它的经验。在Quartz plugin docs中简要提及。
【讨论】: