2015-10-24 4 views
0

Это первый раз, когда я пытаюсь использовать планировщик кварца в Mule. Я пытаюсь запланировать время начала потока, основанное на списке DateTimes, который я взял из БД.Внедрение кварцевого планировщика в mule

Чтобы изучить работу планировщика 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 

Теперь я понял работу кварца, но у меня есть hardtime, связанное с Java-кодом с концепцией кварца в муле. Я хочу реализовать точно такую ​​же вещь в mule, и позже я могу заменить даты на те, что из DB. Если бы вы могли направить меня или показать мне пример, это будет очень полезно. Я знаю только о планировщике кварца, если у вас есть другая идея, вы всегда приветствуетесь ...

FYI. Hellojob будет заменен потоком с регистратором.

[Tyring, чтобы реализовать логику в муле, в конечном итоге не было где-то. Так что я не размещаю этот код здесь, так как он может дать неправильное представление о том, какова моя настоящая цель !!. Java-код выше - прекрасный пример]

ответ

0

Для реализации пакетной обработки в 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