在Tomcat上使用Grails和Quartz:如何优雅地关闭?

3

我有一个Grails应用程序,其中包含以下grails-app/conf/QuartzConfig.groovy文件:

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]的线程,但未能停止它。这非常可能会导致内存泄漏。
以上也不会因配置文件中的属性而改变,这似乎与挂起进程有关。任何帮助将不胜感激。

你如何关闭Quartz?你的所有作业是否立即响应中断并关闭? - Mark Thomas
@MarkThomas 我基本上正在关闭Tomcat。在关闭之前,我是否需要手动关闭Quartz?我认为属性interruptJobsOnShutdown应该可以做到。 - vahidg
您可以编写一个服务 MBean,公开一个操作并使用它来停止作业,而不是强制终止。服务操作可以设置一标志,每个作业都可以检查该标志。使调度程序实例对作业可访问。基于该标志值,执行作业应能够在完成执行后停止重复自身。我将尝试完整地阐述这个想法的方法。 - Acewin
1个回答

1

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


最新版本似乎已经解决了问题(至少,在日志中不再显示)。 - Volker
1
有时候我会遇到这个quartz grails插件实际版本1.0.2的问题。 - Nico

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接