2

Quartz を使用する場合、いくつかのジョブ (約 10 など) をチェーンとして実行したいと考えています。つまり、同時実行ではありません。「決算日変更」イベントが発生してから実行すればいいのですが、同じDBにアクセスするので一斉に起動したくありません。代わりにそれらを順次実行したい(順序は関係ありません)。

それらをグループに入れるアイデアがあります-「account_day_change_jobs」と言って、Quartzを何らかの方法で構成して、残りを実行してください:-)手段-グループからすべてのジョブを順番に実行します。API ドキュメント (1.8 と 2.1 の両方) を試し、Google を試しましたが、何も見つかりませんでした。

出来ますか?それは合理的ですか?私が望む動作を達成するための他のアイデアはありますか?

アイデアをどうもありがとう:-) ハンス

4

3 に答える 3

1

クォーツを使って久しぶりですが、登録した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つの「グループトリガー」が必要になります。

于 2013-02-09T00:26:39.847 に答える