2026年6月6日土曜日

SpringBoot + JobRunr で JobRunr の管理画面を追加する方法

SpringBoot + JobRunr で JobRunr の管理画面を追加する方法

概要

JobRunr にはデフォルトでキューやジョブ情報を確認するための管理画面機能があるのでそれを追加する方法を紹介します

環境

  • macOS 26.4.1
  • openjdk 26.0.1
  • SpringBoot 4.0.6
    • jasypt-spring-boot 4.0.4
    • jackson-databind 2.21.2
    • jobrunr 8.6.1
  • gradle 9.5.1
  • VSCode 1.121.0
  • MySQL 9.6.0
  • Redis 8.6.3

管理画面の設定

まずはプロパティファイルに管理画面の設定情報を記載します
今回追加したのは app.jobrunr.dashboard.enabled=trueapp.jobrunr.dashboard.port=8000 です

  • vim src/main/resources/application.properties
spring.application.name=demo
# update はアプリケーション起動時に、Entityに対応するテーブルがなければ作成します
spring.jpa.hibernate.ddl-auto=update
spring.jpa.show-sql=true

spring.datasource.url=jdbc:mysql://${MYSQL_HOST:127.0.0.1}:3306/mydatabase
spring.datasource.username=ENC(bFMupckSRHJ/9QmXd1EVTw==)
spring.datasource.password=ENC(QFCt95vHHcJpgm8oKhghkJoEknQv3tF0)

spring.data.redis.host=localhost
spring.data.redis.port=6379

# Web起動時はJobRunrのBackgroundJobServerを無効化(worker jarで有効化)
app.jobrunr.background-job-server.enabled=false

# JobRunr Dashboard (管理画面)
app.jobrunr.dashboard.enabled=true
app.jobrunr.dashboard.port=8000

# Jasypt 暗号化キーの設定(環境変数から取得)
jasypt.encryptor.algorithm=PBEWithMD5AndDES
jasypt.encryptor.iv-generator-classname=org.jasypt.iv.NoIvGenerator
jasypt.encryptor.password=${JASYPT_PASSWORD:default_password}

またワーカー側の設定ファイルではそれらを無効にする設定を記載します

  • vim src/main/resources/application-worker.properties
spring.main.web-application-type=none

app.jobrunr.background-job-server.enabled=true
app.jobrunr.dashboard.enabled=false

管理画面の設定値を Bean に追加

先ほどプロパティファイルに追加した値を Bean に追加するためにプロパティファイルの値を管理するクラスを作成します

前回も説明しましたが Bean ではプロパティファイルの値を自動で読み込んでくれないためクラスを準備する必要があります

  • vim src/main/java/com/example/demo/config/JobRunrDashboardProperties.java
package com.example.demo.config;

import org.springframework.boot.context.properties.ConfigurationProperties;

@ConfigurationProperties(prefix = "app.jobrunr.dashboard")
public class JobRunrDashboardProperties {

        private boolean enabled = true;
        private int port = 8000;

        public boolean isEnabled() {
                return enabled;
        }

        public void setEnabled(boolean enabled) {
                this.enabled = enabled;
        }

        public int getPort() {
                return port;
        }

        public void setPort(int port) {
                this.port = port;
        }
}

管理画面の有効化

先ほど追加したプロパティの値を取得するクラスを使ってダッシュボードを有効化します

JobRunr の設定は Bean として登録してあるので先程のクラスを使う必要があります

有効化する実体は jobRunrConfiguration.useDashboard でここにプロパティの値を渡します

  • vim src/main/java/com/example/demo/config/JobRunrConfig.java
package com.example.demo.config;

import javax.sql.DataSource;

import org.jobrunr.configuration.JobRunr;
import org.jobrunr.scheduling.JobScheduler;
import org.jobrunr.server.JobActivator;
import org.jobrunr.storage.StorageProvider;
import org.jobrunr.storage.StorageProviderUtils.DatabaseOptions;
import org.jobrunr.storage.sql.mysql.MySqlStorageProvider;
import org.springframework.context.ApplicationContext;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

@Configuration
public class JobRunrConfig {

        @Bean
        StorageProvider storageProvider(DataSource dataSource) {
                return new MySqlStorageProvider(dataSource, DatabaseOptions.CREATE);
        }

        @Bean
        JobActivator jobActivator(ApplicationContext applicationContext) {
                return applicationContext::getBean;
        }

        @Bean
        JobScheduler jobScheduler(StorageProvider storageProvider, JobActivator jobActivator,
                        JobRunrBackgroundJobServerProperties jobRunrBackgroundJobServerProperties,
                        JobRunrDashboardProperties jobRunrDashboardProperties) {
                var jobRunrConfiguration = JobRunr.configure().useStorageProvider(storageProvider).useJobActivator(jobActivator)
                                .useBackgroundJobServerIf(jobRunrBackgroundJobServerProperties.isEnabled());

                if (jobRunrDashboardProperties.isEnabled()) {
                        jobRunrConfiguration.useDashboard(jobRunrDashboardProperties.getPort());
                }

                return jobRunrConfiguration.initialize().getJobScheduler();
        }
}

動作確認

localhost:8000/dashboard にアクセスすると管理画面にアクセスできます

最後に

JobRunr の管理画面を追加する方法を紹介しました
このままだと Web アプリケーションの本体に管理画面が付属してしまい予期せぬアクセスが発生する場合があるので本来はダッシュボードのアプリだけを切り出して別プロセスで起動するのが定石です

次回はダッシュボードを分離する方法を紹介します

参考サイト

0 件のコメント:

コメントを投稿