Kotlin+SpringBootでDB接続先を環境変数から取得したい+環境ごとでapplication.propertiesを変えたい

kotlin+SprintBootのプロジェクトをkubernetesのPodで動かすため、
環境変数でDBの接続先を変えれるようにしたい

DB接続先の定義はapplication.propertiesに記載している。

調べてみるとこのファイルをちょっと手を加えるだけでよいことがわかった。

${<環境変数名>:<デフォルト値>} の書き方ができる。

applicatio.properties

    # DB接続設定
    spring.datasource.url=${DB_URL:jdbc:mysql://localhost:3306/xxxx}
    spring.datasource.username=${DB_USER:xxxxx}
    spring.datasource.password=${DB_PASSWORD:xxxx}
    spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver

これで終わりかと思ったが、
追加で環境によってapplication.propertiesを
切り変える必要があった。

ビルドはgradleでやっているので渡した引数によって、
動きを変えれるようにする。

build.gradle.kts

  defaultTasks("copyEnvironmentConfig", "build") // #1

  //環境ごとの設定ファイル上書き
  task("copyEnvironmentConfig", Copy::class) { // #2
    //ex) 引数に指定 -Penv=local
    val env = (project.properties["env"] ?: "local").toString() // #3
    println("use application properties for ${env}")
    from("src/main/resources/env/${env}/")
    into("src/main/resources/")
  }
  1. build.gradleでdefaultTasksを指定することで、ビルド時に設定ファイルをコピーするタスクを指定することができる
  2. タスクを定義、Copy::classを指定することでディレクトリのコピーができるfrom,into処理が使用できる。
  3. project.properties["env"]で値を取得
    ちなみにproject・project.by("env")で、パラメータが指定されているかはとれる

gradleコマンド

./gradlew -Penv=production  -x test