2014-09-21 2 views
0

저는 Quartz 2.1에 새로운 기능이있어서 질문이 있습니다. 나는쿼츠 방지 작업이 중복 됨

@PersistJobDataAfterExecution 
@DisallowConcurrentExecution 
public class HelloJob implements Job { 

    public void execute(JobExecutionContext arg0) throws JobExecutionException { 

다음과 같은 작업을하고 난

JobDetail jobDetail = JobBuilder.newJob(HelloJob.class).withIdentity("Job1").build(); 
JobDetail jobDetail2 = JobBuilder.newJob(HelloJob.class).withIdentity("Job2").storeDurably().build(); 
Trigger trigger = TriggerBuilder.newTrigger().forJob(jobDetail).withSchedule(
         SimpleScheduleBuilder.simpleSchedule() 
           .withIntervalInSeconds(5).repeatForever()).build(); 
Trigger trigger2 = TriggerBuilder.newTrigger().forJob(jobDetail2).withSchedule(
         SimpleScheduleBuilder.simpleSchedule() 
           .withIntervalInSeconds(10).repeatForever()).build(); 
     SchedulerFactory factory = new StdSchedulerFactory("quartz.properties"); 
     Scheduler scheduler = factory.getScheduler(); 
     scheduler.start(); 
     scheduler.scheduleJob(jobDetail, trigger); 
     scheduler.scheduleJob(jobDetail2, trigger2); 

당신이 작업 1마다 5 초, 작업 2는 10 초마다 실행 실행시피 아래와 같이이 작업을 만듭니다. 내가 원하는 것은 job1이 10 초 이상 걸리면 job2는 job1이 끝날 때까지 실행됩니다. 그러나 실제로 job1이 수행되지 않는 동안에도 job2가 계속 실행됩니다. 저 좀 도와 주 시겠어요? 당신은 같은 일을 사용하는 경우

P/s: this is the quartz.properties: 
org.quartz.threadPool.class = org.quartz.simpl.SimpleThreadPool 
org.quartz.threadPool.threadCount = 2 
org.quartz.threadPool.threadsInheritContextClassLoaderOfInitializingThread = true 

답변

0
  1. 당신은 하나의 JobDetail의 인스턴스 (안 두)가 필요합니다.
  2. 스토어에서 전화주세요 .Durably for JobDetail.
  3. 는 다음과 같은 트리거하기 JobDetail 및 트리거 2
  4. 예약 작업을 설정합니다 코드의

    scheduler.start(); 
    scheduler.addJob(jobDetail, true); 
    scheduler.scheduleJob(trigger); 
    scheduler.scheduleJob(trigger2); 
    

다른 부분이 좋다.