2014-09-21 91 views
0

我是Quartz 2.1的新手,對此有疑問。我有一個工作如下石英防止作業重疊

@PersistJobDataAfterExecution 
@DisallowConcurrentExecution 
public class HelloJob implements Job { 

    public void execute(JobExecutionContext arg0) throws JobExecutionException { 

和我創造就業崗位2如下

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

正如你看到的,JOB1執行每5秒,作業2執行每10秒。我想要的是,如果job1完成超過10秒鐘,job2將執行直到job1完成。但實際上,job2仍然在job1未完成時執行。你可以幫我嗎?

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. Call storeDurably for you JobDetail。
  3. 設置觸發相同的JobDetail和觸發2
  4. 安排工作進度,如下所示:

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

你的代碼的其他部分還是不錯的。