2010-08-06 2 views
8

Я использую последний кварц 1.8.3 на jboss 4.0.5. Работа кварца постоянна и сохраняется в локальной базе данных. Когда я вызываю метод останова или ожидания на выполняемом объекте планировщика кварца , задания продолжают выполнять планировщик, только состояние задания пуст и выполнение не выполняется.Quartz Scheduler не останавливается после выключения

Я ожидал бы (по крайней мере, согласно документации API кварца), что при завершении работы или в режиме ожидания планировщика задания, запланированные ранее в базе данных, не будут выполнены.

Если вызов выключения или ожидания в планировщике не является методом достижения этого, что это такое?

Работы не только заканчиваются исполнением, но и запланированные задания продолжают срабатывать.

Вот дополнительная информация, как спросил:

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> 

спасибо

+1

Ok спасибо, я сделал это –

+0

Какой кварцевый планировщик вы используете? Могли бы вы опубликовать возможность инициализации службы и планировщика? – Falle1234

+0

- это только работающие задания, заканчивающие выполнение или запланированные задания тоже? –

ответ

7

Если есть какие-либо задания, выполняемые при вызове выключения, следует ли прерывать эти задания или нет, зависит от свойства 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, которое выключит кварцевый планировщик, как только ваш вызывающий поток отключится. Я не знаю, что происходит с состоянием рабочих мест.

Как указано в комментариях, разместите код и конфигурацию, чтобы получить четкий ответ.

3

вы можете использовать org.quartz.plugin.shutdownhook.cleanShutdown=TRUE в свойствах кварца файл

Смежные вопросы