読者です 読者をやめる 読者になる 読者になる

「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


簡単ですが、以上になります。

[ 環境情報 ]
Windows 7 SP1
Java SE 8 Update 74
Quartz 2.2.2