Quartz Scheduler 关机后不停止 [英] Quartz Scheduler not stopping after shutdown

查看:33
本文介绍了Quartz Scheduler 关机后不停止的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

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

I'm using the currently latest quartz 1.8.3 on jboss 4.0.5. The quartz jobs are persistent and saved into a local database. When I call the shutdown or standby method on the executing quartz scheduler object jobs still continue to execute by the scheduler, only that the jobs state is empty and the execution fails.

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

I would expect (at least according to quartz API documentation) that when I shutdown or make the scheduler standby, that jobs previously scheduled into the database will not be executed.

如果在调度器上调用shutdown 或standby 不是实现这一点的方法,那是什么?

If calling shutdown or standby on the scheduler is not the method to achieve that, what is?

作业不仅完成执行,还继续触发计划作业.

这里是询问的附加信息:

Here is additional info as asked:

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);        
        }
    }
}

以下是quartz配置属性的副本:

The following is a copy of the quartz configuration properties:

#============================================================================
# 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 中的一个片段:

Here is a snippet from the web.xml where the quartz is initialized:

 <!--  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.

If there are any jobs executing when you call shutdown, whether to interrupt those jobs or not depends on the property org.quartz.scheduler.interruptJobsOnShutdown.

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

See http://jira.terracotta.org/jira/browse/QTZ-41?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel . I am unable to find more documentation on this.

另一个属性是 org.quartz.scheduler.makeSchedulerThreadDaemon=true,它会在调用线程关闭后立即关闭石英调度程序.我不知道工作状态会发生什么变化.

The other property is org.quartz.scheduler.makeSchedulerThreadDaemon=true, which will shutdown quartz scheduler as soon as your calling thread shuts down. I do not know what happens to the state of the jobs.

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

As mentioned in the comments, post some code and configuration to get clear answer.

这篇关于Quartz Scheduler 关机后不停止的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆