JobRunr 4.0のリリースからわずか6か月後、JobRunrの創設者であり主要な開発者のRonald Dehuysser氏はJobRunr 5.0を発表した。これは、Spring Nativeの実装を提供し、デフォルトの再試行回数の設定とデータベースタイプを選択をできるようにし、そして、トランザクションをサポートすることにより、Spring、Quarkus、Micronautのサポートを改善している。現在、ジョブは間隔に基づいてスケジュールできる。cron式により、週の最終日と月の最終日をサポートする。
JobRunrは、商用利用が無料のオープンソースのJVMジョブスケジューリングツールである。永続ストレージを使ってJavaでのバックグラウンド処理ができるようになっており、分散ソリューションをサポートする。有料のプロフェッショナルバージョンではさらに、キュー、バッチ、ジョブチェーンが提供される。一般的なJavaライブラリと共に、Spring Boot、Micronaut、Quarkus向けの特定のソリューションが利用できる。
JobRunrを使うには、SQL、NoSQL、InMemoryデータソースを設定する必要がある。バックグラウンドタスクを実行するために、設定後にさまざまなオプションを使うことができる。
BackgroundJob.enqueue(() ->
System.out.println("Fire and forget, executed once."));
BackgroundJob.schedule(now().plusMinutes(1), () ->
System.out.println("Scheduled job, executed once"));
BackgroundJob.scheduleRecurrently(Cron.every30seconds(), () ->
System.out.println("Recurring job, executed every 30 seconds"));
BackgroundJob.enqueue(() -> jobRunrService.annotatedJob("retry"));
最後のステートメントでは、例外が発生した場合にジョブを再試行するために、@Job
アノテーションを持つメソッドが使われている。
@Job(name = "Example retry job", retries = 1)
public void annotatedJob(String variable) throws Exception {
System.out.println("Annotated job " + variable);
throw new Exception("Trigger retry");
}
この例では、次の出力が生成される。最後の行は無制限に繰り返される。
Recurring job, executed every 30 seconds
Fire and forget, executed once.
Annotated job retry
java.lang.Exception: Trigger retry
…
Annotated job retry
java.lang.Exception: Trigger retry
…
Recurring job, executed every 30 seconds
Scheduled job, executed once
Recurring job, executed every 30 seconds
この新しいバージョンでは、GraalVMを使ってアプリケーションを構築・実行するために、jobrunr-spring-boot-native
の依存関係を持つSpring Nativeをサポートする。
繰り返し間隔としてDuration
クラスのインスタンスを使うことにより、ジョブのスケジューリングができるようになった。
BackgroundJob.scheduleRecurrently("recurring-job", Duration.ofSeconds(10),
() -> System.out.println("Recurring job"));
間隔をサポートする定期的なジョブを変更することは、大きな変更である。 JobRunr 5.0にアップグレードする前に、すべての定期的なジョブとスケジュールされたジョブを削除する必要がある。
JobRunrには、オプションのWebベースのダッシュボードがある。中でもログを表示する機能がある。SLF4Jのマップ診断コンテキスト(MDC)を使うと、リクエストcorrelationIdの使用など、ロギング内でMDC変数を使うことができる。
@Job(name = "Example retry job %X{request.correlationId}", retries = 1)
cron式により、週の最終日と月の最終日のジョブをスケジューリングできるようになった。週の日、月の日のフィールドに「L」を入力すればよい。
Spring Boot、Quarkus、Micronautでデフォルトの再試行回数を指定できるようになった。
# Spring Boot
org.jobrunr.jobs.default-number-of-retries=42
# Quarkus
quarkus.jobs.default-number-of-retries=42
# Micronaut
jobrunr:
jobs:
default-number-of-retries:42
Spring Boot、Micronaut、Quarkusで複数のデータベースを使う場合は、データベースタイプ(例:sql)を指定してJobRunrデータベースを設定できる。
# Spring Boot
org.jobrunr.database.type=sql
# Quarkus
quarkus.jobrunr.database.type=sql
# Micronaut:
jobrunr:
database:
type:sql
JobRunrのfluent APIは、Micrometerメトリックをサポートするようになった。
JobRunr.configure()
.useMicroMeter(new JobRunrMicroMeterIntegration(meterRegistry));
このバージョンでは、ダッシュボードにnoIndex
とnoFollow
のメタタグが含まれている。そのため、インターネット上で公開されているダッシュボードはGoogleにインデックスされなくなった。
定期的なジョブはキャッシュされ、ジョブが変更されると再ロードされるようになった。これにより、JobRunrが新しい処理をチェックするたびに、StorageProvider
インターフェイスからジョブが再ロードされなくなるため、パフォーマンスが向上する。
このリリースでの大きな変更によって、ElasticSearchとすべてのJobRunr関連のプロジェクト依存関係の更新が必要になる。
次の機能は、JobRunr Proエディションでのみ使用できる。
- Spring Boot StarterまたはMicronaut Integrationによって作成されたトランザクションは、JobRunr Proによって使われる。
BackgroundJobServer
でpollInterval
を最低でも5秒に設定する必要がなくなったため、ジョブの即時処理が可能になった。JobClientFilter
あるいはJobServerFilter
を実装するSpring、Micronaut、Quarkus Beanは、JobRunrにJob Filtersとして自動的に登録される。そのため、開発者はJobRunrの既存の機能を拡張できるようになった。- どのサーバがジョブを実行できるかを指定するServerTagsを使うことで、ジョブをスケジュールしたサーバでのみ、そのジョブをスケジュールできるようになった。
@Job(runOnServerWithTag = "%CURRENT_SERVER")
- JobRunr Proダッシュボードでは、失敗したすべてのジョブを一括で、再キューイングあるいは削除できるようになった。
JobScheduler
クラスは、データベースからジョブ結果 を照会できるようになった。
2021年9月、JavaコミュニティがJobRunrについて知っておくべきことについて尋ねられたとき、Dehuysser氏はInfoQに次のように語った。
Dehuysser: 私は3つのことを強調したいです。
- JobRunrは、ASM(Spring、Hibernate、および他の多くのフレームワークでも使用される)を使って、ジョブラムダを分析するための魔法をかけます。ASMを使うことで、JVMバイトコードについて多くのことを学びました。これは想像していたほど難しくはありません
- JobRunrはバイトコード分析を実行するため、Oracle Quality Outreachプログラムにも参加しています。これは、JobRunrがJVMの今後のリリースに対してテストされることを意味します。これは、新しいJavaリリースでも継続して機能することを保証する助けになります。また、JVM自体のバグが早期に検出されるため、Javaコミュニティにも役立ちます。
- サポートや追加機能が必要なユーザのために、JobRunr Proもあります。JobRunr上に構築されており、優先度の異なるキュー(優先度の高いジョブは優先度の低いジョブの前に処理される)、ジョブチェーン、アトミックバッチ、検索機能が加わったより優れたダッシュボードなどの追加機能が加わります。
また、販売されたライセンスについては、収益の5%がチーム・ツリーズに送られ、新しいツリーがいくつか計画されています。
全変更リストの詳細については、JobRunr 5.0のブログ投稿を参照してください。