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/") }
- build.gradleでdefaultTasksを指定することで、ビルド時に設定ファイルをコピーするタスクを指定することができる
- タスクを定義、Copy::classを指定することでディレクトリのコピーができるfrom,into処理が使用できる。
- project.properties["env"]で値を取得
ちなみにproject・project.by("env")で、パラメータが指定されているかはとれる
gradleコマンド
./gradlew -Penv=production -x test