Реализовать Кварцевый Планировщик в муле
Это первый раз, когда я пытаюсь использовать планировщик Quartz в Mule. Я пытаюсь запланировать время начала потока на основе списка 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 с концепцией Quartz in mule. Я хочу реализовать то же самое в муле, и позже я смогу заменить даты датами из БД. Если бы вы могли вести меня или показать мне пример, это будет очень полезно. Я знаю только о Кварцевом планировщике, если у вас есть другая идея, всегда пожалуйста...
FYI. Hellojob будет заменен потоком с регистратором в нем.
[Привязка к реализации логики в муле закончилась не где. Так что я не публикую этот код здесь, так как он может дать неправильное предположение о том, что моя настоящая цель!! Выше приведен Java-код]
1 ответ
Для реализации пакетной обработки в Mule вы можете использовать модуль пакетной обработки Mule, который использует кварцевый планировщик и облегчит вашу жизнь. Вы можете назначить CRON-выражение для планирования заданий. Пожалуйста, обратитесь к документации ниже, чтобы узнать, как пакетные задания работают в муле.
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