2016-12-06 4 views
0

私の目的は、グループごとに最大同時ジョブ数を指定することができるキューシステムを作成することです。グループAの場合、最大3つのジョブを同時に実行する必要があります。ジョブは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を実装し、 "vetoJobExecution" メソッド内でごアボートロジックを持っている必要がありTriggerListener

で見ることができます。

boolean vetoJobExecution(Trigger trigger, 
        JobExecutionContext context) 

トリガーが発火している、そしてJobDetailが実行されようとしている関連付けられていますとき、スケジューラによって呼び出され、その。実装が(trueを返すことによって)実行を拒否した場合、ジョブのexecuteメソッドは呼び出されません。

+0

ありがとう、ちょうど私が探しているもの! – Johan

関連する問題