Storage 操作実装ガイド

Storage(MinIO)操作のための IF を提供する。 実際の操作のための実装方法を説明する。

Bucket の種類と役割

アップロード専用 Bucket

ファイルの自動削除

Bucket 数

有(数分~数時間程度)

全領域共通で単一

フロントからアップロードするファイルを一時的に格納する Bucket フロントからこの Bucket にアップロードされたファイルは、Backend を介して永続化 Bucket へと格納される

永続化 Bucket

ファイルの自動削除

Bucket 数

領域ごとに、複数作成可

主に Backend で使用されるファイルを無期限で格納する Bucket 自動削除されないため、明示的なファイルの削除が必要

一時保存 Bucket

ファイルの自動削除

Bucket 数

有(数時間~数日程度)

全領域共通で単一

帳票など、一定時間内にダウンロードされ得るファイルを格納する Bucket

各 Bucket に対して、実装者が任意で操作可能な処理

アップロード専用 Bucket

永続化 Bucket

一時保存 Bucket

UL リンク作成

ファイル取得

ファイル格納

ファイル削除

DL リンク作成

Storage 操作実装手順

scaffold 取り込み

下記クラスが sweded に配置される(予定)

ogis_ri.dx2sweded.service.storage.port.MomentaryStorage.java ogis_ri.dx2sweded.service.storage.port.PermanentStorage.java ogis_ri.dx2sweded.service.storage.port.TemporaryStorage.java ogis_ri.dx2sweded.service.storage.port.UploadDestination.java

ogis_ri.dx2sweded.service.storage.adapter.MinIOStorage.java ogis_ri.dx2sweded.service.storage.adapter.MomentaryStorageImpl.java ogis_ri.dx2sweded.service.storage.adapter.PermanentStorageImpl.java ogis_ri.dx2sweded.service.storage.adapter.TemporaryStorageimpl.java ogis_ri.dx2sweded.service.storage.adapter.config.CommonConfig.java ogis_ri.dx2sweded.service.storage.adapter.config.TemporaryStorageConfig.java

環境変数設定

applications.properties に設定を追記 以下は記載例

# MinIOへの接続設定
storage-endpoint=XXXXXXXXXXXXXXXXXXXXX
storage-accesskey=XXXXXXXXXX
storage-secretkey=XXXXXXXXXX
# アップロード専用Bucket名
temporary-bucket-name=tmp-bucket

# 永続化・一時保存Bukcet名
permanent-bucket1=persist-bucket
permanent-bucket2=persist-bucket2
permanent-bucket3= ...()
momentary-bucket=momentary-bucket

MinIO への接続設定、アップロード専用 Bucket 名までは環境変数名を上記と合わせること

永続化・一時保存 Bucket 名の環境変数名は、後述の設定クラスと合わせる。

自分の領域に設定用クラスを作成

以下のようなクラスを実装する。

package ogis_ri.dx2notifications.adapter.api; // 自領域に配置

import org.eclipse.microprofile.config.inject.ConfigProperty;

import jakarta.enterprise.context.Dependent;
import jakarta.enterprise.inject.Produces;
import ...その他は略

@Dependent
public class Config {

    // 接続用の設定をInject
    @Inject
    CommonConfig commonConfig;

    // 環境変数からBucket名取得
    @ConfigProperty(name = "permanent-bucket1") // それぞれ環境変数名と合わせる
    String permanentBucketName1;
    @ConfigProperty(name = "permanent-bucket2")
    String permanentBucketName2;
    @ConfigProperty(name = "momentary-bucket")
    String momentaryBucketName;

    // 以下の記述により、Bucket名指定でのInjectが可能となる
    @Produces
    @Named
    public PermanentStorage permanent1() { // 1つ目の永続化Bucket
        return new PermanentStorageImpl(permanentBucketName1, commonConfig);
    }

    @Produces
    @Named
    public PermanentStorage permanent2() { // 2つ目の永続化Bucket
        return new PermanentStorageImpl(permanentBucketName2, commonConfig);
    }

    @Produces
    @Named
    public MomentaryStorage momentary() { // 一時保存Bucket
        return new MomentaryStorageImpl(momentaryBucketName, commonConfig);
    }

}

各 Bucket 用の IF をインジェクト