Quartz Scheduler在关机后不会停止

我在jboss 4.0.5上使用了目前最新的石英1.8.3。 quartz作业是持久的并保存到本地数据库中。 当我在执行石英调度程序对象上调用shutdown或standby方法时,调度程序仍继续执行作业,只有作业状态为空且执行失败。

我希望(至少根据石英API文档)当我关闭或使调度程序处于待机状态时,之前调度到数据库中的作业将不会被执行。

如果在调度程序上调用shutdown或standby不是实现它的方法,那是什么?

这些工作不只是完成执行,而是继续触发计划工作。

以下是其他信息:

public class QuartzNotificationsSchedulerBean implements NotificationsScheduler, ServletContextAware { ... public String scheduleNotification(Notification notification) { // Schedule the job with the trigger try { // Define job instance String groupName = this.createNotificationGroupName(notification); String triggerName = this.createNoficationTriggerName(notification); String jobName = this.createNoficationJobName(notification); JobDetail job = new JobDetail(jobName, groupName , ScheduledNotificationJob.class); JobDataMap jobDataMap = new JobDataMap(); jobDataMap.putAll(notification.getContext()); job.setJobDataMap(jobDataMap); Calendar notificationTime = notification.getTime(); Trigger trigger = new SimpleTrigger(triggerName, groupName , notificationTime.getTime()); scheduler.scheduleJob(job, trigger); return trigger.getName(); } catch (SchedulerException e) { throw new NotificationScheduleException(e, notification); } return null; } public void setServletContext(ServletContext servletContext) { this.sf = (SchedulerFactory) servletContext.getAttribute(QuartzInitializerListener.QUARTZ_FACTORY_KEY); try { scheduler = sf.getScheduler(); if(scheduler.isStarted() == false) { scheduler.start(); } } catch (SchedulerException e) { logger.error("Failed to load Quartz scheduler ", e); } } } 

以下是石英配置属性的副本:

 #============================================================================ # Configure Main Scheduler Properties #============================================================================ org.quartz.scheduler.instanceName = scheduler org.quartz.scheduler.instanceId = AUTO org.quartz.scheduler.wrapJobExecutionInUserTransaction = true #============================================================================ # Configure ThreadPool #============================================================================ org.quartz.threadPool.class = org.quartz.simpl.SimpleThreadPool org.quartz.threadPool.threadCount = 45 org.quartz.threadPool.threadPriority = 5 #============================================================================ # Configure JobStore #============================================================================ org.quartz.jobStore.misfireThreshold = 60000 org.quartz.jobStore.class = org.quartz.impl.jdbcjobstore.JobStoreTX org.quartz.jobStore.driverDelegateClass = org.quartz.impl.jdbcjobstore.StdJDBCDelegate #org.quartz.jobStore.useProperties = false org.quartz.jobStore.dataSource = FOR_QUARTZ org.quartz.jobStore.isClustered = true org.quartz.jobStore.clusterCheckinInterval = 20000 #============================================================================ # Configure Datasources #============================================================================ org.quartz.dataSource.FOR_QUARTZ.jndiURL = java:jdbc/live-quartz 

这是一个来自web.xml的片段,其中初始化了quartz:

    config-file wm_quartz.properties   shutdown-on-unload true   start-scheduler-on-load true   org.quartz.ee.servlet.QuartzInitializerListener  

谢谢

如果在调用shutdown时有任何作业正在执行,是否中断这些作业取决于属性org.quartz.scheduler.interruptJobsOnShutdown

请参阅http://jira.terracotta.org/jira/browse/QTZ-41?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel 。 我无法找到更多关于此的文档。

另一个属性是org.quartz.scheduler.makeSchedulerThreadDaemon=true ,一旦调用线程关闭,它将关闭quartz调度程序。 我不知道工作状况会发生什么。

正如评论中所提到的,发布一些代码和配置以获得明确的答案。

你可以在你的quartz属性文件中使用org.quartz.plugin.shutdownhook.cleanShutdown=TRUE