【发布时间】: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