2011-05-27 63 views
0

我正在从远程主机上的目录传输文件,并且触发器在间隔到达此作业时触发作业。但我想确保如果作业仍在存储器上工作(下载文件还没有完成)当触发火时间到来时,石英会跳过这个间隔。我试图用这个 cr on_trigger.MISFIRE_INSTRUCTION_DO_NOTHING,但我似乎只有在没有可用的线程才能工作。如何跳过cron触发器firetime

public CronTrigger scheduleJob(RemoteJob job, String cronExpression,Date firstFireTime) throws SchedulerException, ParseException { 
    JobDetail jobDetail = new JobDetail(job.getDescription(), job.getName(), job.getClass()); 
    CronTrigger crTrigger = new CronTrigger(
      "cronTrigger", job.getName(), cronExpression);  
    scheduler.scheduleJob(jobDetail, crTrigger);  
    crTrigger.setStartTime(firstFireTime); 
    crTrigger.setMisfireInstruction(CronTrigger.MISFIRE_INSTRUCTION_DO_NOTHING); 
    return crTrigger; 

} 

回答

2

创建,如果你的下载任务之一是运行一个跟踪TriggerListener,并且,然后否决其他类型的作业的执行返回true。

0

我照你说的

public boolean vetoJobExecution(Trigger trigger, JobExecutionContext context) { 

    try { 

     List<JobExecutionContext> jobs = 
context.getScheduler().getCurrentlyExecutingJobs(); 

     for (JobExecutionContext job : jobs) { 


      if (job.getTrigger().equals(context.getTrigger()) && 
!job.getJobInstance().equals(this)) { 

       _logger.info("There's another instance running,So job discarded " + context.getJobDetail().getGroup()+ ":"+context.getJobDetail().getName()); 
       return true; 
      } 
     } 
    } catch (SchedulerException ex) { 

    return true; 
    } 

    return false; 
}