【问题标题】:Grails and Quartz on Tomcat: how to gracefully shutdownTomcat 上的 Grails 和 Quartz:如何优雅地关闭
【发布时间】:2013-11-05 08:36:26
【问题描述】:

我有一个带有以下grails-app/conf/QuartzConfig.groovy 的 Grails 应用程序:

quartz {
    autoStartup = true
    jdbcStore = false
    waitForJobsToCompleteOnShutdown = false
    exposeSchedulerInRepository = false
    interruptJobsOnShutdown = true

    props {
        scheduler.skipUpdateCheck = true
    }
}

但是,每次我关闭 Tomcat 时,都会有一个进程挂起,我必须将其杀死。根据上面的配置文件,这不应该发生。我应该使用其他属性来实现此目的吗?

此外,在 Tomcat 启动时,我看到 10 行(对于 10 个 Quartz 线程):

严重:Web 应用程序 [/test] 似乎已经启动了一个线程 命名为 [DefaultQuartzScheduler_Worker-5] 但未能阻止它。 这很可能会造成内存泄漏。

上面也没有随着配置文件中的属性而改变,这似乎与挂机过程有关。任何帮助将不胜感激。

【问题讨论】:

  • 你是如何关闭石英的?您的所有工作是否都会通过关闭来立即响应中断?
  • @MarkThomas 我基本上要关闭 Tomcat。我必须在关机前手动关闭 Quartz 吗?我的印象是属性interruptJobsOnShutdown 应该这样做。
  • 您可以编写一个服务 MBean,公开一个操作并使用它来停止作业,而不是强制终止。 > 服务操作可能会设置一个标志,每个作业都可以检查该标志。 >> 让作业可以访问调度程序实例。 >>> 基于标志值执行作业应该能够在完成执行后停止重复。我将尝试对这个想法提出一个完整的方法。

标签: tomcat grails quartz-scheduler shutdown


【解决方案1】:

使用最新版本的 Quartz 插件。我们在一天前发布了它。

【讨论】:

  • 最新版本似乎已经解决了问题(至少,它不再出现在日志中)
  • 有时我对这个石英 grails 插件的实际版本 1.0.2 有问题
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2017-01-02
  • 2019-01-31
  • 2014-12-01
  • 2014-11-03
  • 1970-01-01
  • 2019-01-11
  • 1970-01-01
相关资源
最近更新 更多