BT

最新技術を追い求めるデベロッパのための情報コミュニティ

寄稿

Topics

地域を選ぶ

InfoQ ホームページ ニュース JobRunr 5.0.0ではフレームワークのサポートが改善

JobRunr 5.0.0ではフレームワークのサポートが改善

原文(投稿日:2022/04/27)へのリンク

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));

このバージョンでは、ダッシュボードにnoIndexnoFollowのメタタグが含まれている。そのため、インターネット上で公開されているダッシュボードはGoogleにインデックスされなくなった。

定期的なジョブはキャッシュされ、ジョブが変更されると再ロードされるようになった。これにより、JobRunrが新しい処理をチェックするたびに、StorageProviderインターフェイスからジョブが再ロードされなくなるため、パフォーマンスが向上する。

このリリースでの大きな変更によって、ElasticSearchとすべてのJobRunr関連のプロジェクト依存関係の更新が必要になる。

次の機能は、JobRunr Proエディションでのみ使用できる。

  • Spring Boot StarterまたはMicronaut Integrationによって作成されたトランザクションは、JobRunr Proによって使われる。
  • BackgroundJobServerpollIntervalを最低でも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つのことを強調したいです。

  1. JobRunrは、ASM(Spring、Hibernate、および他の多くのフレームワークでも使用される)を使って、ジョブラムダを分析するための魔法をかけます。ASMを使うことで、JVMバイトコードについて多くのことを学びました。これは想像していたほど難しくはありません
  2. JobRunrはバイトコード分析を実行するため、Oracle Quality Outreachプログラムにも参加しています。これは、JobRunrがJVMの今後のリリースに対してテストされることを意味します。これは、新しいJavaリリースでも継続して機能することを保証する助けになります。また、JVM自体のバグが早期に検出されるため、Javaコミュニティにも役立ちます。
  3. サポートや追加機能が必要なユーザのために、JobRunr Proもあります。JobRunr上に構築されており、優先度の異なるキュー(優先度の高いジョブは優先度の低いジョブの前に処理される)、ジョブチェーン、アトミックバッチ、検索機能が加わったより優れたダッシュボードなどの追加機能が加わります。

また、販売されたライセンスについては、収益の5%がチーム・ツリーズに送られ、新しいツリーがいくつか計画されています。

全変更リストの詳細については、JobRunr 5.0のブログ投稿を参照してください。

作者について

この記事に星をつける

おすすめ度
スタイル

BT