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