本番環境は環境変数、開発環境は設定ファイルで設定値を管理する

はじめに

パスワード設定の管理を下記のようにしたい - 開発用パスワードは設定ファイルで管理し、gitなどで開発者全員で共有したい - 本番用パスワードは本番環境の環境変数として管理し、共有しない

やった方法

  • .envというファイルを作る
  • .envファイルに本番環境の環境変数と同様のキー・値を登録する
  • application-development.ymlを作る
  • 作ったapplication-development.ymlに下記のプロパティを追加する

.envファイル内容 起動時にspring.profiles.active=developmentのプロファイルを設定して実行

MESSAGE=nihao4

application-development.yml

spring:
  config:
    import: optional:file:.env[.properties]
package com.example.properties

import org.springframework.beans.factory.annotation.Value
import org.springframework.web.bind.annotation.GetMapping
import org.springframework.web.bind.annotation.RestController

@RestController("/")
class HelloController(
    @Value("\${MESSAGE}")
    val message: String
) {
    @GetMapping
    fun hello(): String {
        return message
    }
}

結果

ローカル開発環境

curl http://localhost:8080

f:id:fjswkun:20220325141149p:plain

本番環境

MESSAGE=honban2で環境変数を登録してある

f:id:fjswkun:20220325141446p:plain

コマンドライン引数をつけて実行する

はじめに

application.propertiesやapplication.ymlでプロパティを設定していたが、コマンドライン引数をつかっても設定できるので試したメモです

messageというキー、nihao0という値で設定する

IntelliJ

Program argumentsにプロパティを設定する

f:id:fjswkun:20220325101333p:plain f:id:fjswkun:20220325101336p:plain

messageを取得するコードを書き、Runで実行すると確認できる

package com.example.properties

import org.springframework.beans.factory.annotation.Value
import org.springframework.web.bind.annotation.GetMapping
import org.springframework.web.bind.annotation.RestController

@RestController("/")
class HelloController(
    @Value("\${message}")
    val message: String
) {
    @GetMapping
    fun hello(): String {
        return message
    }
}

結果 f:id:fjswkun:20220325101701p:plain

jarファイルから起動

ビルドしてjarファイルを作る際にmessageが設定されてなくてエラーになる。 application.ymlなどでデフォルト値を設定しておくと良い。

java -jar build/libs/properties-0.0.1-SNAPSHOT.jar --massage=nihao0

application.ymlの設定値に環境変数を使う

はじめに

application.ymlの設定値に環境変数を使う方法のメモです

やりかた

設定値のキーがsampleで、環境変数「SAMPLE」を設定する場合

環境変数「SAMPLE」を設定する

sample: ${SAMPLE}

環境変数「SAMPLE」が取得できない場合のデフォルト値を設定する

デフォルト値は「サンプル」とする

sample: ${SAMPLE:サンプル}

環境変数を設定できない場合の注意

  • ターミナルでprintenvして、環境変数があるか確認する
  • IntelliJを使って開発している場合、IntelliJを再起動しないと環境変数を参照できないことがある