クォーツを使って久しぶりですが、登録した2人のジョブリスナーを試して、2つの異なるグループを聴いてみました
基本的な考え方は、グループ/リスト( "todayGroup")から1つのジョブを起動することです。'( "todayGroup")ジョブリスナーは、正常または不良の完了を検出します。次に、リスト内の次のジョブを開始します。ただし、「終了したばかり」のジョブは、スケジューラーの( "tomorrowGroup")の下に保存されます。
public class MyTodayGroupListener extends JobListenerSupport {
private String name;
private static String GROUP_NAME = "todayGroup";
public MyOtherJobListener(String name) {
this.name = name;
}
public String getName() {
return name;
}
@Override
public void jobWasExecuted(JobExecutionContext context,
JobExecutionException jobException) {
Scheduler sched = context.getScheduler();
// switch the job to the other group so we don't run it again today.
JobDetail current = context.getJobDetail();
JobDetail tomorrows = current.getJobBuilder().withIdentity(current.getKey().getName(), "tomorrow").build();
sched.addJob(tomorrows,true);
//see if there is anything left to run
Set<JobKey> jobKeys = sched.getJobKeys(groupEquals(GROUP_NAME ));
Iterator<JobKey> nextJob = null;
if(jobKeys != null && !jobKeys.isEmpty() ){
nextJob = jobKeys.iterator();
}
if(nextJob != null){
// Define a Trigger that will fire "now" and associate it with the first job from the list
Trigger trigger = newTrigger()
.withIdentity("trigger1", "group1")
.startNow()
.forJob(nextJob =.next())
.build();
// Schedule the trigger
sched.scheduleJob(trigger);
}
}
}
同様に、必要なときにそれぞれのグループから最初のジョブを起動する2つの「グループトリガー」が必要になります。