無理しないでゆっくり休んでね!

【Java】よく使われる3つの「パラメータ管理方法」〜Const・設定ファイル・DBの使い分け〜

Javaの業務プロジェクトでよく出てくる「値の管理方法」は大きく3パターンある。
それぞれ実装方法・反映方法・向いている場面が違うので整理しておく。

Javaクラスで定義(定数クラス)

主な特徴

  • public static final でクラスに直接定義
  • 値はコードに固定変更にはビルド&デプロイが必要
  • JVM内で参照されるだけなので処理は最速

実装例

public class Const {
    public static final int MAX_ITEM = 100;
    public static final String SYSTEM_MODE = "PROD";
}

よく使う場面

  • 無効/有効などの固定フラグ
  • 数値による種別コード
  • if文などで分岐する画面タイプ定義
  • LocalDateTime.now().plusDays(Const.LIMIT_DAYS) みたいな日数・期間定義

不向きな場面

  • 設定変更のために毎回コードを変更したくないもの
  • 本番・開発など環境別で値が異なるもの

設定ファイル(application.properties / yml)

主な特徴

  • Spring Boot標準の外部設定ファイル
  • 再起動すれば値変更が反映される(Javaコード変更なし

実装例①

app:
  mode: prod
  max-items: 100
  external-api-url: https://api.example.com
@Value("${app.mode}")
private String mode;

@Value("${app.max-items}")
private int maxItems;

実装例②

gacha:
  base-rare-rate: 0.07
  pity-threshold: 30
@Component
@ConfigurationProperties(prefix = "gacha")
@Getter @Setter
public class GachaConfig {
    private double baseRareRate;
    private int pityThreshold;
}
@Service
public class GachaService {

    private final GachaConfig gachaConfig;

    public GachaService(GachaConfig gachaConfig) {
        this.gachaConfig = gachaConfig;
    }

    public void draw() {
        double rate = gachaConfig.getBaseRareRate();
        int pity = gachaConfig.getPityThreshold();
        System.out.println("今は:" + rate);
    }
}

よく使う場面

  • 環境ごとに変わるURL
    • dev用とprod用で別URL
  • メール送信スイッチ
    • mail.enabled=false にして開発環境では送らない
  • 外部連携のID・Token類
  • ログ出力レベルなど実行時には変わらないが、環境で違うもの

不向きな場面

  • 頻繁に値を変更したい機能(変更ごとに再起動が必要
  • 動的に制御したいケース(例:バナー表示有無を運用側で切り替えたい)

DBのパラメータテーブルで管理

主な特徴

  • 値をDBに保存し、実行時に取得
  • 値を変更するためにコード・再起動は不要
  • 管理画面と組み合わせれば運用しやすい

DB構造例

CREATE TABLE config_param (
  param_key VARCHAR(100) PRIMARY KEY,
  param_value VARCHAR(255)
);

Javaから取得(DAO)

public interface ConfigParamDao {
    String getParam(String key);
}
String limitDays = configParamDao.getParam("LIMIT_DAYS");

よく使う場面

  • キャンペーンのON/OFF制御
  • 画面文言の切替
  • 表示件数やページサイズを動的に変える
  • アラート条件の閾値設定
  • 通知時間帯・バッチの実行タイミング

不向きな場面

  • 小規模・単純なプロジェクト(DAOやキャッシュが不要な場合)
  • 一度も値が変わらない定義(無駄にDBアクセスが発生)

比較まとめ

管理方法特徴代表的な使用例注意点
Java定数値をコードに固定フラグ・種別コード・列数定義など変更は再ビルド必須
設定ファイルソース変更なし、再起動で反映環境差(URL/API)、ログ設定、ON/OFF制御頻繁な変更には不向き
DB実行時変更OK、UI対応も可能キャンペーン、通知設定、画面切替条件など初期設計・DAOが必要

コメント

タイトルとURLをコピーしました