В этом примере мы покажем вам, как объявить несколько заданий Quartz с помощью API Quartz, XML Quartz и Spring. В структуре планировщика Quartz каждое задание будет прикреплено к уникальному триггеру и запущено планировщиком.
P.S В Quartz один триггер для нескольких заданий невозможен. (Поправьте меня, если это неправильно.)
1. API-интерфейсы кварца
Создайте 3 рабочих места Quartz, JobA, JobB и JobC.
package com.mkyong.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.mkyong.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.mkyong.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"); } }
Используйте API-интерфейсы Quartz, чтобы объявить выше 3 заданий, назначенных 3 определенным триггерам, и запланировать их.
package com.mkyong.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); } }
Выход
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. Пример XML-кода Quartz
Эквивалентная версия в XML-файле. Убедитесь, что “кварц.свойства” и “quartz-config.xml “расположены по пути к классу проекта.
Файл – quartz.свойства
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
Файл – quartz-config.xml
JobA GroupDummy This is Job A com.mkyong.quartz.JobA dummyTriggerNameA JobA GroupDummy 0/5 * * * * ? JobB GroupDummy This is Job B com.mkyong.quartz.JobB dummyTriggerNameB JobB GroupDummy 0/5 * * * * ?
Файл: web.xml
org.quartz.ee.servlet.QuartzInitializerListener
3. Пример Весны
Эквивалентная версия весной.
package com.mkyong.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.mkyong.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.mkyong.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"); } }
Файл: Spring-Quartz.xml – Объявляет задания и триггеры в файле конфигурации Spring XML bean.
Запустите его
package com.mkyong.common; import org.springframework.context.support.ClassPathXmlApplicationContext; public class App { public static void main(String[] args) throws Exception { new ClassPathXmlApplicationContext("Spring-Quartz.xml"); } }
Выход.
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
Скачать Исходный Код
Рекомендации
Оригинал: “https://mkyong.com/java/example-to-run-multiple-jobs-in-quartz/”