2015-01-26 2 views
0

Я пытаюсь использовать кварц, чтобы назначать задания в веб-приложении, работающем на Glassfish. Я использую RAMJobStore. Проблема в том, что иногда задание, которое было запланировано, не выполняется, даже если оно было запланировано в прошлом или в будущем. Количество заданий крайне низкое, в общей сложности до 20 заданий, запланированных в любое время на планировщике, и гарантированного максимума 1 работы, выполняемой одновременно, поэтому я предполагаю, что количество потоков не является проблемой, я мог бы установить его threadCount 1, и он все равно будет работать. Планировщик также не отключается до того, как сервлет будет уничтожен. Так что может быть причиной того, что некоторые рабочие места не выполняются?Quartz не выполняет задания случайно

StartupServlet

public void init() 
    { 
    try 
     { 
      scheduler = StdSchedulerFactory.getDefaultScheduler(); 
      scheduler.start(); 
      loadJobs(); 
     } 
     catch (SchedulerException se) 
     { 
      se.printStackTrace(); 
     } 
} 

    @Override 
    public void destroy() 
    { 
try 
     { 
      scheduler.shutdown(); 
     } 
     catch (SchedulerException se) 
     { 
      se.printStackTrace(); 
     } 
    } 

Планирование работы

JobDetail job = JobBuilder.newJob(ScheduledTransactionJob.class) 
            .withIdentity(transaction.getId()) 
            .build(); 

     Trigger trigger = TriggerBuilder.newTrigger() 
            .withIdentity(transaction.getId()) 
            .startAt(date) 
            .build(); 
     try 
     { 
      scheduler.scheduleJob(job, trigger); 
      dateFormat = new SimpleDateFormat("dd MMM yyyy, HH:mm:ss"); 
      String recurringTransactionTime = dateFormat.format(date); 
      logger.info("Scheduled job for " + recurringTransactionTime); 
     } 
     catch (SchedulerException se) 
     { 
      se.printStackTrace(); 
     } 

quartz.properties

#============================================================================ 
# Configure Main Scheduler Properties 
#============================================================================ 

org.quartz.scheduler.skipUpdateCheck = true 
org.quartz.scheduler.instanceName = AppScheduler 
org.quartz.scheduler.instanceId = AUTO 

#============================================================================ 
# Configure ThreadPool 
#============================================================================ 

org.quartz.threadPool.class = org.quartz.simpl.SimpleThreadPool 
org.quartz.threadPool.threadCount = 25 
org.quartz.threadPool.threadPriority = 10 

#============================================================================ 
# Configure JobStore 
#============================================================================ 

org.quartz.jobStore.misfireThreshold = 60000 
org.quartz.jobStore.class = org.quartz.simpl.RAMJobStore 

ответ

0

КАЖЕТСЯ чтобы работать сейчас. Не сталкивались с новыми проблемами. Может быть, проблема с конфигурацией, так как я переместил файл конфигурации в /src/main/resources. попробовать Также поворот на входе, чтобы помочь с отладкой:

log4j.logger.com.gargoylesoftware.htmlunit=DEBUG 

Мы также добавили JobTriggerListener, чтобы помочь с бревнами:

private static class JobTriggerListener implements TriggerListener 
    { 
     private String name; 

     public JobTriggerListener(String name) 
     { 
      this.name = name; 
     } 

     public String getName() 
     { 
      return name; 
     } 

     public void triggerComplete(Trigger trigger, JobExecutionContext context, 
            Trigger.CompletedExecutionInstruction triggerInstructionCode) 
     { 

     } 

     public void triggerFired(Trigger trigger, JobExecutionContext context) 
     { 

     } 

     public void triggerMisfired(Trigger trigger) 
     { 
      logger.warn("Trigger misfired for trigger: " + trigger.getKey()); 
      try 
      { 
       logger.info("Available threads: " + scheduler.getCurrentlyExecutingJobs()); 
      } 
      catch (SchedulerException ex) 
      { 
       logger.error("Could not get currently executing jobs.", ex); 
      } 
     } 

     public boolean vetoJobExecution(Trigger trigger, JobExecutionContext context) 
     { 
      return false; 
     } 
    } 
Смежные вопросы