JavaのQuartzライブラリのJobListenerで定義したジョブを監視する方法

JavaのQuartzライブラリのJobListenerで定義したジョブを監視する方法

org.quartz.JobListenerインタフェースをimplementsしたリスナークラスを作成してSchedulerのgetListenerManager().addJobListener()メソッドにリスナーのインスタンスを指定すると、ジョブを監視することができます。

オーバーライドするメソッドが4つあります。

メソッド 処理
getName 名前を返す
jobToBeExecuted job実行前処理
jobExecutionVetoed 不明
jobWasExecuted job実行後処理

以下、Jobを監視するリスナークラスです。

とりあえずジョブの実行前後で標準出力するだけのリスナーを作成しました。リスナーAとします。

スケジューラにリスナーを登録する

2つのジョブAとジョブBを作成して、適当なトリガーでジョブBをスケジューリングします。

SchedulerクラスのgetListenerManager().addJobListener()メソッドにリスナーAのインスタンスを渡してリスナーを登録します。

第一引数
JobListenerのインスタンス

以下のようにリスナーを登録します。

全ソースは以下です。

この時、ジョブBに対してリスナーAが動作します。実行結果です。

ジョブAをスケジューリングしてもリスナーAが動作します。

org.quartz.impl.matchers.KeyMatcherクラスで識別子が一致する場合に監視する

リスナーAはジョブAだけを監視したい、ジョブBは監視させたくないといった場合、getListenerManager().addJobListener()メソッドの第二引数を追加します。

第一引数にリスナーAのインスタンスを指定します。

第二引数にMatcher<JobKey>を指定します。

第一引数 第二引数
JobListenerのインスタンス Matcher<JobKey>

具体的には以下のような感じです。

全ソースは以下です。

ジョブBは実行されますが、監視しているのはジョブAなのでリスナーで監視できていないのがわかります。

次回、意図的にジョブの実行を拒否してjobExecutionVetoed()メソッドが実行されることを確認します。

  • このエントリーをはてなブックマークに追加
  • Evernoteに保存Evernoteに保存

コメントをどうぞ

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

CAPTCHA