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. クロントリガー
上記の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 KB)