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 的工作原理,但是我很难将 java 代码与 mule 中的 Quartz 概念联系起来。我想在 mule 中实现完全相同的东西,然后我可以用 DB 中的日期替换日期。如果你能指导我或给我看一个例子,那将有很大的帮助。我只知道 Quartz 调度器,如果您有不同的想法,随时欢迎您...

供参考。Hellojob 将被一个带有记录器的流所取代。

[试图在 mule 中实现逻辑最终没有结果。所以我没有在这里发布该代码,因为它可能会错误地假设我的真正目标是什么!!。上面的Java代码就是一个完美的例子]

4

1 回答 1

0

要在 Mule 中实现批处理,您可以使用 Mule 批处理模块,该模块在内部使用石英调度程序,将使您的生活更轻松。您可以分配 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 回答