はじめに
このプロジェクトでは、Quartz フレームワークを使って、ユーザーに目覚めるように促す、歯を磨くように促す、顔を洗うように促すという簡単なジョブをスケジュールして実行する方法を学びます。
🎯 タスク
このプロジェクトでは、以下のことを学びます。
RemindJobクラスでJobインターフェイスを実装して、実行する必要のあるタスクを定義する方法RemindSchedulerクラスを実装して、Quartz Scheduler を使ってRemindJobをスケジュールして実行する方法RemindSchedulerクラスのスケジューリング機能を検証するためのテスト関数を書く方法
🏆 成果
このプロジェクトを完了すると、以下のことができるようになります。
- Quartz フレームワークを使ってジョブをスケジュールして実行する
- ジョブ用の
JobDetailとTriggerインスタンスを作成して構成する - Quartz Scheduler を起動して停止する
- アプリケーションの機能を検証するためのテスト関数を書く
RemindJob クラスを実装する
このステップでは、Quartz フレームワークの Job インターフェイスを実装する RemindJob クラスをどのように実装するか学びます。
/home/labex/project/QuartzRemind/src/main/java/org/labexディレクトリにあるRemindJob.javaファイルを開きます。org.quartz.Jobインターフェイスのexecute()メソッドを実装します。このメソッドは、ジョブが実行されるときに Quartz Scheduler によって呼び出されます。
@Override
public void execute(JobExecutionContext context) throws JobExecutionException {
System.out.println("Wake up! Brush your teeth and wash your face!");
System.out.println("Current system time - " + new Date());
}
execute() メソッドは、「目覚めろ!歯を磨り、顔を洗え!」というリマインダーメッセージと現在のシステム時刻を表示する必要があります。
RemindScheduler クラスを実装する
このステップでは、RemindJob をスケジュールして実行する RemindScheduler クラスをどのように実装するか学びます。
/home/labex/project/QuartzRemind/src/main/java/org/labexディレクトリにある RemindScheduler.java ファイルを開きます。RemindJob 用の org.quartz.JobDetail インスタンスを作成して返す getJobDetail() メソッドを実装します。
public static JobDetail getJobDetail() {
return JobBuilder.newJob(RemindJob.class)
.withIdentity("reminderJob", "reminderGroup")
.build();
}
- RemindJob 用の org.quartz.Trigger インスタンスを作成して返す getTrigger() メソッドを実装します。トリガーは 2 秒ごとにジョブを繰り返し、3 回実行します。
public static Trigger getTrigger() {
return TriggerBuilder.newTrigger()
.withIdentity("reminderTrigger", "reminderGroup")
.startNow()
.withSchedule(SimpleScheduleBuilder.simpleSchedule()
.withIntervalInSeconds(2)
.withRepeatCount(2))
.build();
}
- org.quartz.Scheduler インスタンスを使って RemindJob をスケジュールして実行する doScheduler() メソッドを実装します。
public void doScheduler() throws SchedulerException, InterruptedException {
Scheduler scheduler = StdSchedulerFactory.getDefaultScheduler();
// スケジューラを起動する
scheduler.start();
System.out.println("Scheduling started");
// 定義された JobDetail と Trigger でジョブをスケジュールする
scheduler.scheduleJob(getJobDetail(), getTrigger());
// 10 秒間待つ
Thread.sleep(10000);
// スケジューラをシャットダウンする
scheduler.shutdown();
System.out.println("Scheduling completed");
}
このメソッドは、スケジューラを起動し、JobDetail と Trigger インスタンスでジョブをスケジュールし、10 秒間待ち、その後スケジューラをシャットダウンします。
テスト関数を書く
このステップでは、RemindScheduler クラスのスケジューリング機能を検証するためのテスト関数をどのように書くか学びます。
/home/labex/project/QuartzRemind/src/test/java/org/labexディレクトリにある TestQuartz.java ファイルを開きます。RemindScheduler のインスタンスを作成し、その doScheduler() メソッドを呼び出す test() メソッドを実装します。
@Test
public void test() {
try {
new RemindScheduler().doScheduler();
} catch (InterruptedException | SchedulerException e) {
e.printStackTrace();
}
}
このテストメソッドは、スケジューリング機能を実行し、ジョブが予想通りに実行されることを検証します。
テストを実行する
テストを実行してプロジェクトを検証するには、次の手順に従います。
ターミナルを開き、
/home/labex/project/QuartzRemindディレクトリに移動します。次のコマンドを実行してテストを実行します。
mvn test
次の出力が表示されるはずです。
Scheduling started
Wake up! Brush your teeth and wash your face!
Current system time - Fri Apr 26 06:54:03 CST 2024
Wake up! Brush your teeth and wash your face!
Current system time - Fri Apr 26 06:54:05 CST 2024
Wake up! Brush your teeth and wash your face!
Current system time - Fri Apr 26 06:54:07 CST 2024
Scheduling completed
この出力は、RemindScheduler クラスによって予定通りに RemindJob が 3 回実行されたことを示しています。
おめでとうございます!RemindJob と RemindScheduler クラスを実装し、スケジューリング機能を検証するためのテスト関数を書くことで、無事にプロジェクトを完了しました。
まとめ
おめでとうございます!このプロジェクトを完了しました。あなたは実験(Lab)をもっとたくさん行って技術力を向上させることができます。



