「Quartz」ジョブスケジューリングライブラリ Quartz を使ってみる
Java のジョブスケジューリングライブラリに Quartz というのがあるみたいです。少し使ってみたのでメモを残しておきます。
・Quartz Scheduler |
https://quartz-scheduler.org/
* ダウンロード
以下からダウンロードできます。
・Quartz Scheduler | Download
https://quartz-scheduler.org/downloads
今回は Maven を使うことにしたので pom.xml を以下のように定義する。
■ pom.xml
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> <modelVersion>4.0.0</modelVersion> <groupId>TaskTest</groupId> <artifactId>TaskTest</artifactId> <version>0.0.1-SNAPSHOT</version> <dependencies> <dependency> <groupId>org.quartz-scheduler</groupId> <artifactId>quartz</artifactId> <version>2.2.2</version> </dependency> <dependency> <groupId>org.quartz-scheduler</groupId> <artifactId>quartz-jobs</artifactId> <version>2.2.2</version> </dependency> </dependencies> </project>
* ジョブクラスの作成
ジョブクラスは org.quartz.Job インタフェースの実装クラスとして作成してあげるみたいです。
■ TestJob.java
package test.job; import org.quartz.Job; import org.quartz.JobExecutionContext; import org.quartz.JobExecutionException; public class TestJob implements Job { @Override public void execute(JobExecutionContext context) throws JobExecutionException { System.out.println("Test Job Execute !!"); } }
* ジョブ実行クラスの作成
上記の TestJob を実行するクラスは以下の感じになります。
■ TestJobExecute.java
package test.job; import org.quartz.JobBuilder; import org.quartz.JobDetail; import org.quartz.Scheduler; import org.quartz.SchedulerFactory; import org.quartz.SimpleScheduleBuilder; import org.quartz.Trigger; import org.quartz.TriggerBuilder; public class TestJobExecute { public static void main(String[] args) throws Exception { int interval = 5; SchedulerFactory schedFact = new org.quartz.impl.StdSchedulerFactory(); Scheduler sched = schedFact.getScheduler(); sched.start(); JobDetail job = JobBuilder.newJob(TestJob.class) .withIdentity("testJob", "g1") .build(); Trigger trigger = TriggerBuilder .newTrigger() .withIdentity("testTrigger", "g1") .startNow() .withSchedule( SimpleScheduleBuilder.simpleSchedule() .withIntervalInSeconds(interval) .repeatForever()) .build(); sched.scheduleJob(job, trigger); } }
JobDetail、Trigger を作ってやって Scheduler#scheduleJob に渡してあげるという感じですね。上記のサンプルだと「5 秒間隔 ( withIntervalInSeconds(interval) )で終わることなく ( repeatForever() )」ジョブが実行されます。
■ 実行結果
Test Job Execute !! Test Job Execute !! Test Job Execute !! .....
execute() の引数 JobExecutionContext からは JobDetail や Trigger 等々の情報を取得することができるみたいです。
public void execute(JobExecutionContext context) throws JobExecutionException { JobDetail job = context.getJobDetail(); System.out.println("job name:" + job.getKey().getName()); System.out.println("job group:" + job.getKey().getGroup()); Trigger trigger = context.getTrigger(); System.out.println("trigger name: " + trigger.getKey().getName()); System.out.println("trigger group: " + trigger.getKey().getGroup()); }
■ 実行結果
job name:testJob job group:g1 trigger name: testTrigger trigger group: g1 .....
ドキュメントはこちらです。
・Quartz Scheduler Developer Guide
https://quartz-scheduler.org/generated/2.2.2/html/qtz-all/#page/quartz-scheduler-webhelp%2F_qs_all.1.009.html%23
簡単ですが、以上になります。