在我的应用程序中,我使用quartz来安排一些作业在Glassfish上的Java应用程序中运行。 有时,当我重新部署我的应用程序时,我忘记关闭我的调度程序,并且在部署新版本的应用程序后无法阻止它们。 因此,问题是如何在应用程序取消部署后停止/终止石英线程。
以下是我添加工作的代码:
SchedulerFactory sf = new StdSchedulerFactory();
Scheduler sched sched = sf.getScheduler();
// 1: EMS2ELC JOB /////////////
String EMS2ELCScheduleEx = "0 30 0 * * ?";
job = new JobDetail("EMS2ELCJob", "WebServicesGroup", EMS2ELCJob.class);
trigger = new CronTrigger("EMSTrigger", "WebServicesGroup", "EMS2ELCJob", "WebServicesGroup", EMS2ELCScheduleEx, TimeZone.getTimeZone("America/Los_Angeles"));
sched.addJob(job, true);
ft = sched.scheduleJob(trigger);
log.info("SchedulerController: " + job.getFullName() + " has been scheduled to run at: " + ft + " and repeat based on expression: " + trigger.getCronExpression());
答案 0 :(得分:4)
当您说重新部署时,是否是热部署,即没有终止glassfish服务器?您可以实现ServletContextListener.contextDestroyed()方法,并从该调用实现quartz API提供的关闭钩子。您需要在web.xml中注册您的监听器