Exemple pour exécuter plusieurs tâches dans Quartz
Dans cet exemple, nous vous montrons comment déclarer plusieurs tâches Quartz via les API Quartz, Quartz XML et Spring. Dans le cadre du planificateur Quartz, chaque travail sera attaché à un déclencheur unique et l'exécutera par le planificateur.
P.S In Quartz, one trigger for multiple jobs is not possible. (Corrigez-moi si c'est faux.)
1. API Quartz
Créez 3 jobs Quartz, JobA, JobB et JobC.
package com.example.quartz; import org.quartz.Job; import org.quartz.JobExecutionContext; import org.quartz.JobExecutionException; public class JobA implements Job { @Override public void execute(JobExecutionContext context) throws JobExecutionException { System.out.println("Job A is runing"); } }
package com.example.quartz; import org.quartz.Job; import org.quartz.JobExecutionContext; import org.quartz.JobExecutionException; public class JobB implements Job { @Override public void execute(JobExecutionContext context) throws JobExecutionException { System.out.println("Job B is runing"); } }
package com.example.quartz; import org.quartz.Job; import org.quartz.JobExecutionContext; import org.quartz.JobExecutionException; public class JobC implements Job { @Override public void execute(JobExecutionContext context) throws JobExecutionException { System.out.println("Job C is runing"); } }
Utilisez les API Quartz pour déclarer au-dessus de 3 Jobs, assignés à 3 déclencheurs particuliers et les planifier.
package com.example.quartz; import org.quartz.CronScheduleBuilder; import org.quartz.JobBuilder; import org.quartz.JobDetail; import org.quartz.JobKey; import org.quartz.Scheduler; import org.quartz.Trigger; import org.quartz.TriggerBuilder; import org.quartz.impl.StdSchedulerFactory; public class CronTriggerExample { public static void main( String[] args ) throws Exception { JobKey jobKeyA = new JobKey("jobA", "group1"); JobDetail jobA = JobBuilder.newJob(JobA.class) .withIdentity(jobKeyA).build(); JobKey jobKeyB = new JobKey("jobB", "group1"); JobDetail jobB = JobBuilder.newJob(JobB.class) .withIdentity(jobKeyB).build(); JobKey jobKeyC = new JobKey("jobC", "group1"); JobDetail jobC = JobBuilder.newJob(JobC.class) .withIdentity(jobKeyC).build(); Trigger trigger1 = TriggerBuilder .newTrigger() .withIdentity("dummyTriggerName1", "group1") .withSchedule( CronScheduleBuilder.cronSchedule("0/5 * * * * ?")) .build(); Trigger trigger2 = TriggerBuilder .newTrigger() .withIdentity("dummyTriggerName2", "group1") .withSchedule( CronScheduleBuilder.cronSchedule("0/5 * * * * ?")) .build(); Trigger trigger3 = TriggerBuilder .newTrigger() .withIdentity("dummyTriggerName3", "group1") .withSchedule( CronScheduleBuilder.cronSchedule("0/5 * * * * ?")) .build(); Scheduler scheduler = new StdSchedulerFactory().getScheduler(); scheduler.start(); scheduler.scheduleJob(jobA, trigger1); scheduler.scheduleJob(jobB, trigger2); scheduler.scheduleJob(jobC, trigger3); } }
Sortie
Job A is runing //every 5 seconds Job B is runing Job C is runing Job A is runing //every 5 seconds Job B is runing Job C is runing
2. Exemple XML Quartz
La version équivalente dans un fichier XML. Assurez-vous que «quartz.properties» et «quartz-config.xml» se trouvent dans le chemin de classe du projet.
Fichier - quartz.properties
org.quartz.scheduler.instanceName = MyScheduler org.quartz.threadPool.threadCount = 3 org.quartz.jobStore.class = org.quartz.simpl.RAMJobStore org.quartz.plugin.jobInitializer.class =org.quartz.plugins.xml.XMLSchedulingDataProcessorPlugin org.quartz.plugin.jobInitializer.fileNames = quartz-config.xml org.quartz.plugin.jobInitializer.failOnFileNotFound = true
Fichier - quartz-config.xml
JobA GroupDummy This is Job A com.example.quartz.JobA dummyTriggerNameA JobA GroupDummy 0/5 * * * * ? JobB GroupDummy This is Job B com.example.quartz.JobB dummyTriggerNameB JobB GroupDummy 0/5 * * * * ?
Fichier: web.xml
org.quartz.ee.servlet.QuartzInitializerListener
3. Exemple de printemps
La version équivalente au printemps.
package com.example.job; import org.quartz.JobExecutionContext; import org.quartz.JobExecutionException; import org.springframework.scheduling.quartz.QuartzJobBean; public class JobA extends QuartzJobBean { @Override protected void executeInternal(JobExecutionContext arg0) throws JobExecutionException { System.out.println("Job A is runing"); } }
package com.example.job; import org.quartz.JobExecutionContext; import org.quartz.JobExecutionException; import org.springframework.scheduling.quartz.QuartzJobBean; public class JobB extends QuartzJobBean { @Override protected void executeInternal(JobExecutionContext arg0) throws JobExecutionException { System.out.println("Job B is runing"); } }
package com.example.job; import org.quartz.JobExecutionContext; import org.quartz.JobExecutionException; import org.springframework.scheduling.quartz.QuartzJobBean; public class JobC extends QuartzJobBean { @Override protected void executeInternal(JobExecutionContext arg0) throws JobExecutionException { System.out.println("Job C is runing"); } }
File : Spring-Quartz.xml - Déclare les travaux et les déclencheurs dans le fichier de configuration du bean XML Spring.
Exécuter
package com.example.common; import org.springframework.context.support.ClassPathXmlApplicationContext; public class App { public static void main(String[] args) throws Exception { new ClassPathXmlApplicationContext("Spring-Quartz.xml"); } }
Production.
INFO: Starting beans in phase 2147483647 Jul 30, 2012 10:38:13 PM org.springframework.scheduling.quartz.SchedulerFactoryBean startScheduler INFO: Starting Quartz Scheduler now Job A is runing Job B is runing Job C is runing Job A is runing Job B is runing Job C is runing
Télécharger le code source
Téléchargez-le -Multiple-Jobs-in-Quartz-Spring-Example.zip (25kb)