繁体   English   中英

Quartz Scheduler 关机后不停止

[英]Quartz Scheduler not stopping after shutdown

我在 jboss 4.0.5 上使用当前最新的quartz 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 中的一个片段:

 <!--  START NOTIFICATION SERVICE -->
    <context-param>
        <param-name>config-file</param-name>
        <param-value>wm_quartz.properties</param-value>
    </context-param>
    <context-param>
        <param-name>shutdown-on-unload</param-name>
        <param-value>true</param-value>
    </context-param>
    <context-param>
        <param-name>start-scheduler-on-load</param-name>
        <param-value>true</param-value>
    </context-param>    

    <listener>
        <listener-class>org.quartz.ee.servlet.QuartzInitializerListener</listener-class>
    </listener> 

谢谢

如果在调用 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 ,一旦您的调用线程关闭,它就会关闭石英调度程序。 我不知道工作状态会发生什么。

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

您可以在石英属性文件中使用org.quartz.plugin.shutdownhook.cleanShutdown=TRUE

请尝试在 init scheduler 时应用这些配置

org.quartz.threadPool.makeThreadsDaemons=true
org.quartz.scheduler.makeSchedulerThreadDaemon=true
org.quartz.scheduler.interruptJobsOnShutdown=true
org.quartz.plugin.shutdownhook.class = org.quartz.plugins.management.ShutdownHookPlugin
org.quartz.plugin.shutdownhook.cleanShutdown = true

您可以参考此链接了解更多详情: https : //www.techpaste.com/2016/03/quartz-scheduler-shutdown/

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM