2016-12-06 100 views
0

我的目標是創建一個隊列系統,我可以爲每個組指定最大併發作業數量,即對於組A,最多3個作業應該同時運行,對於組B max Y工作等等。作業可以在cron時間表上執行,並且只能用SimpleTrigger執行一次,因此在安排作業時我不能檢查隊列,我必須在執行前或執行期間檢查它。我正在實現一個joblistener,我試圖阻止jobToBeExecuted()方法中的執行。我試過了scheduler.interrupt(),但是當作業尚未開始時它就不起作用。 scheduler.deletejob()和scheduler.unschedule()並沒有阻止它執行。石英防止作業執行jobToBeExecuted

任何想法?

public class JobQueueListener implements JobListener { 

@Override 
public void jobToBeExecuted(JobExecutionContext context) { 
    JobKey currentJobKey = context.getJobDetail().getKey(); 
    JobDetail jobDetail = context.getJobDetail(); 
    Scheduler scheduler = context.getScheduler(); 

    if (shouldBePutInQueue(currentJobKey)) { 
      /// Prevent execution and put in queue here, but how? 
    } 
} 

@Override 
public void jobWasExecuted(JobExecutionContext context, JobExecutionException jobException) { 
     //Check queue and execute next in queue 
} 

} 

回答

1

你可以看一下TriggerListener

你應該實現TriggerListener和具有內 「vetoJobExecution」 的方法您中止邏輯。由調度器調用

boolean vetoJobExecution(Trigger trigger, 
        JobExecutionContext context) 

它當觸發器已被觸發,它的相關的JobDetail即將被執行。如果執行通過執行(通過返回true),則不會調用作業的執行方法。

+0

謝謝,正是我想要的! – Johan