0

Mule で Quartz スケジューラを使用しようとするのはこれが初めてです。DB から取得した DateTimes のリストに基づいて、フローの開始時刻をスケジュールしようとしています。

Quatrz スケジューラの動作を調べ、Java の「時間のリスト」に基づいてジョブをスケジュールするために、次のサンプルを実行しました。

import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;

import org.quartz.JobDetail;
import org.quartz.Scheduler;
import org.quartz.SchedulerException;
import org.quartz.SimpleTrigger;
import org.quartz.impl.StdSchedulerFactory;

public class Main {

    public static void main(String[] args) throws SchedulerException {
        List<SimpleTrigger> triggerList = scheduleMyJob();

        int i=0;

        for(SimpleTrigger trigger: triggerList){
            JobDetail jobDetail = new JobDetail();
            jobDetail.setJobClass(Hellojob.class);
            jobDetail.setName("MyJob"+ ++i);


            Scheduler jobScheduler = new StdSchedulerFactory().getScheduler();
            jobScheduler.start();
            jobScheduler.scheduleJob(jobDetail, trigger);
        }
    }

    public static List<SimpleTrigger> scheduleMyJob(){
        List<SimpleTrigger> triggerList = new ArrayList<SimpleTrigger>();

        SimpleTrigger sTrigger = new SimpleTrigger();
        sTrigger.setStartTime(new Date(System.currentTimeMillis()+10000));
        sTrigger.setName("C Trigger 1");
        triggerList.add(sTrigger);
        sTrigger = new SimpleTrigger();
        sTrigger.setStartTime(new Date(System.currentTimeMillis()+20000));
        sTrigger.setName("C Trigger 2");
        triggerList.add(sTrigger);
        sTrigger = new SimpleTrigger();
        sTrigger.setStartTime(new Date(System.currentTimeMillis()+30000));
        sTrigger.setName("C Trigger 3");
        triggerList.add(sTrigger);
        sTrigger = new SimpleTrigger();
        sTrigger.setStartTime(new Date(System.currentTimeMillis()+40000));
        sTrigger.setName("C Trigger 4");
        triggerList.add(sTrigger);

        return triggerList;
    }

}

私のhelloJob.javaは次のようになります..

import java.util.Date;

import org.quartz.Job;
import org.quartz.JobExecutionContext;
import org.quartz.JobExecutionException;

public class Hellojob implements Job {

    public void execute(JobExecutionContext arg0) throws JobExecutionException {
        System.out.println(new Date() +": Hello Quartz World!! "+arg0.getJobDetail().getFullName());



    }

}

これはうまくいきます、私は次の出力を得ました

Sat Oct 24 15:41:47 IST 2015: Hello Quartz World!! DEFAULT.MyJob1
Sat Oct 24 15:41:57 IST 2015: Hello Quartz World!! DEFAULT.MyJob2
Sat Oct 24 15:42:07 IST 2015: Hello Quartz World!! DEFAULT.MyJob3
Sat Oct 24 15:42:17 IST 2015: Hello Quartz World!! DEFAULT.MyJob4

これで、Quartz の動作は理解できましたが、ラバの Quartz の概念と Java コードを関連付けるのに苦労しています。私はラバでまったく同じことを実装したいのですが、後で日付をDBの日付に置き換えることができます。私を案内したり、例を示したりしていただければ、非常に役立ちます。私は Quartz スケジューラーについてしか知りません。別のアイデアがあれば、いつでも歓迎します...

ご参考までに。Hellojob は、ロガーを含むフローに置き換えられます。

[ミュールにロジックを実装しようとしても結局どこにも行きませんでした.そのコードをここに投稿することはありません. 上記のJavaコードは完璧な例です]

4

1 に答える 1

0

Mule でバッチ処理を実装するには、Quartz スケジューラを内部的に使用する Mule Batch Processing Module を使用すると、作業が楽になります。CRON 式をスケジュール ジョブに割り当てることができます。Mule でバッチ ジョブがどのように機能するかについては、以下のドキュメントを参照してください。

https://docs.mulesoft.com/mule-user-guide/v/3.6/batch-processing

https://docs.mulesoft.com/mule-user-guide/v/3.7/batch-streaming-and-job-execution

于 2015-10-25T08:41:18.560 に答える