Пример Quartz 2 JobListener
В этом руководстве мы покажем вам, как создатьJobListener
, чтобы отслеживать статус выполняемых заданий, например, когда задание завершено.
P.S This example is tested with Quartz 2.1.5
1. Кварц Иов
Задание, распечатайте простое сообщение и бросьтеJobExecutionException
для тестирования.
Файл: HelloJob.java
package com.example.quartz; import org.quartz.Job; import org.quartz.JobExecutionContext; import org.quartz.JobExecutionException; public class HelloJob implements Job { public void execute(JobExecutionContext context) throws JobExecutionException { System.out.println("Hello Quartz! 123"); //Throw exception for testing throw new JobExecutionException("Testing Exception"); } }
2. JobListener
Чтобы создать JobListener, просто реализуйте интерфейсJobListener
и переопределите все методы интерфейса.
Файл: HelloJobListener.java
package com.example.quartz.listener; import org.quartz.JobExecutionContext; import org.quartz.JobExecutionException; import org.quartz.JobListener; public class HelloJobListener implements JobListener { public static final String LISTENER_NAME = "dummyJobListenerName"; @Override public String getName() { return LISTENER_NAME; //must return a name } // Run this if job is about to be executed. @Override public void jobToBeExecuted(JobExecutionContext context) { String jobName = context.getJobDetail().getKey().toString(); System.out.println("jobToBeExecuted"); System.out.println("Job : " + jobName + " is going to start..."); } // No idea when will run this? @Override public void jobExecutionVetoed(JobExecutionContext context) { System.out.println("jobExecutionVetoed"); } //Run this after job has been executed @Override public void jobWasExecuted(JobExecutionContext context, JobExecutionException jobException) { System.out.println("jobWasExecuted"); String jobName = context.getJobDetail().getKey().toString(); System.out.println("Job : " + jobName + " is finished..."); if (!jobException.getMessage().equals("")) { System.out.println("Exception thrown by: " + jobName + " Exception: " + jobException.getMessage()); } } }
Note
Не знаю, что такое «jobExecutionVetoed» и когда он сработает? Прокомментируйте, если знаете это, спасибо.
3. CronTrigger
Пример подключения вышеHelloJobListener
к планировщику и мониторинга состояния задания.
Файл: CronTriggerExample.java
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; import org.quartz.impl.matchers.KeyMatcher; import com.example.quartz.listener.HelloJobListener; public class CronTriggerExample { public static void main( String[] args ) throws Exception { JobKey jobKey = new JobKey("dummyJobName", "group1"); JobDetail job = JobBuilder.newJob(HelloJob.class) .withIdentity(jobKey).build(); Trigger trigger = TriggerBuilder .newTrigger() .withIdentity("dummyTriggerName", "group1") .withSchedule( CronScheduleBuilder.cronSchedule("0/5 * * * * ?")) .build(); Scheduler scheduler = new StdSchedulerFactory().getScheduler(); //Listener attached to jobKey scheduler.getListenerManager().addJobListener( new HelloJobListener(), KeyMatcher.keyEquals(jobKey) ); //Listener attached to group named "group 1" only. //scheduler.getListenerManager().addJobListener( // new HelloJobListener(), GroupMatcher.jobGroupEquals("group1") //); scheduler.start(); scheduler.scheduleJob(job, trigger); } }
ЗапуститеCronTriggerExample.java
, вот результат.
jobToBeExecuted Job : group1.dummyJobName is going to start... Hello Quartz! 123 jobWasExecuted Job : group1.dummyJobName is started and finished... Exception thrown by: group1.dummyJobName Exception: Testing Exception jobToBeExecuted Job : group1.dummyJobName is going to start... Hello Quartz! 123 jobWasExecuted Job : group1.dummyJobName is started and finished... Exception thrown by: group1.dummyJobName Exception: Testing Exception
Скачать исходный код
Скачать -Quartz2-JobListener-Example.zip (13 КБ)