スケジュールされたジョブを手動でプログラミングする
SchedulerJobConfiguration インターフェイスを実装すると、ジョブ スケジューラ フレームワークの中核に近づくため、柔軟性が向上し、パフォーマンスが向上します。 ただし、 ジョブ スケジューラ UI では、 SchedulerJobConfigurationを使用して作成されたスケジュールされたジョブよりも、従来のジョブ スケジューラ タスクに関するカスタマイズ オプションとデータがさらに提供されます。
Liferay DXP 2023.Q4/Portal GA93 より前では、 DispatchTaskExecutor の代替は MessageListenerでした。
ジョブ スケジューラ アプリケーションの [スケジュールされたジョブ] タブには、この方法で作成されたすべてのスケジュールされたジョブが一覧表示されます。 ここでは、各ジョブの一般的な詳細(名前、ステータスなど)を表示したり、手動で実行を開始したり、ジョブを個別に一時停止/再開したりできます。

サンプルコードをデプロイする
新しいLiferay インスタンスを起動し、以下を実行します。
docker run -it -m 8g -p 8080:8080 liferay/portal:7.4.3.132-ga132
http://localhost:8080でLiferayにサインインします。 メールアドレス test@liferay.com とパスワード testを使用してください。 プロンプトが表示されたら、パスワードを learnに変更します。
次に、以下の手順に従います。
-
サンプル プロジェクトをダウンロードして解凍します。
curl https://resources.learn.liferay.com/examples/liferay-p1p9.zip -Ounzip liferay-p1p9.zip -
プロジェクトモジュールをビルドしてデプロイします。
cd liferay-p1p9./gradlew deploy -Ddeploy.docker.container.id=$(docker ps -lq)注このコマンドは、コンパイルされたモジュールJARをDockerコンテナ上の
/opt/liferay/osgi/modulesにコピーするのと同じです。 -
Liferay Dockerコンテナコンソールでデプロイを確認します。
STARTED com.acme.p1p9.impl_1.0.0 [2177] -
スケジュールされたジョブが 30 秒ごとにコンソールにメッセージをログに記録することを確認します。
INFO [http-nio-8080-exec-6][P1P9SchedulerJobConfiguration:20] Invoking #getJobExecutorUnsafeRunnable
SchedulerJobConfigurationの実装
SchedulerJobConfiguration インターフェース は、オーバーライドされる 2 つのメソッドを定義します。
getJobExecutorUnsafeRunnableは、スケジュールされたジョブが実行する処理を定義します。getTriggerConfigurationは、スケジュールされたジョブがいつ実行されるかを定義します。
このインターフェースを使用してスケジュールされたジョブを作成するには、
- クラス宣言の上に
@Componentアノテーションを追加して、実装をスケジュールされたジョブ コンポーネントとして登録します。
@Component(service = SchedulerJobConfiguration.class)
public class P1P9SchedulerJobConfiguration
implements SchedulerJobConfiguration {
getJobExecutorUnsafeRunnableメソッドをオーバーライドします。 このメソッドは、スケジュールされたジョブが実行されるたびに実行するすべてのロジックを含む関数を返します。
@Override
public UnsafeRunnable<Exception> getJobExecutorUnsafeRunnable() {
return () -> {
if (_log.isInfoEnabled()) {
_log.info("Invoking #getJobExecutorUnsafeRunnable");
}
};
}
getTriggerConfigurationメソッドをオーバーライドします。 このメソッドは、スケジュールされたジョブを実行する条件を定義します。 サンプル モジュールでは、30 秒のタイマーで実行されます。
@Override
public TriggerConfiguration getTriggerConfiguration() {
return TriggerConfiguration.createTriggerConfiguration(
30, TimeUnit.SECOND);
}
通常の cron 式または Liferay の TimeUnitを使用して TriggerConfigurationを作成できます。