Spring Bootでapplication.properties(yml)を環境によって分ける方法
アプリケーションの設定ファイルであるapplication.propertiesを環境によって分けることができます。
src/main/resources/配下にapplication.properties(yml)がありますが、その中にdev環境ならapplication-dev.properties,it環境ならapplication-it.propertiesをアクティブにする、といったことができます。
application.properties内で以下を記述します。(spring.profiles.active)
spring: profiles: active: dev #devがアクティブになる
これでapplication-dev.properties(yml)、application-it.properties(yml)の両方があってもapplication-dev.properties(yml)ファイルが読み込まれるようになります。
タスクに引数を渡して各環境にデプロイする
各環境にデプロイする(jar,war作成)際にapplication.ymlファイルを開いて、dev,local,test等変更する必要があります。
これは面倒なので、引数を渡してant.replaceregexpで該当箇所を置換したいと思います。
build.gradleにdef getEnv()とtask replaceYml()を追加します。
plugins { id 'java-library' } repositories { jcenter() } dependencies { api 'org.apache.commons:commons-math3:3.6.1' implementation 'com.google.guava:guava:26.0-jre' testImplementation 'junit:junit:4.12' } def getEnv() { String d = System.getProperty('env') return d; } task replaceYml() { ant.replaceregexp(file: "src/main/resources/application.yml", match: "^.*active:\\s+(.*)", replace: " active: " + getEnv(), byline: "true", encoding: "UTF-8") }
Gradleタスクビューから「assemble」を右クリックし、「Gradle実行構成を開く」をクリックします。「Gradleタスク」欄を以下のように設定します。
「プロジェクト設定」タブで引数を指定します。
envにtestという変数を指定しました。
これでassembleをすると、spring.profiles.activeがtestに変わってjarやwarファイルが作成されるようになり、自動でapplication.ymlのファイル内が変更されます。
コマンドラインでビルド
gradlew.batが配置されているディレクトリでビルドすることができます。
アセンブル
gradlew.bat assemble
クリーン
gradlew.bat clean
引数を渡したい場合、以下のように渡せばよいです。
gradlew.bat assemble -Denv=dev
環境変数
上記のように環境ごとにプロファイルを切り替える方法もありますが、application.ymlに環境変数を設定する方法もあります。
${環境変数:初期値}
初期値は省略可能です。AWS Lambdaの場合、Lambdaの環境変数を設定すると上書きできて便利です。
application.yml
spring: datasource: url: ${DB_URL:jdbc:h2:mem:sampledb} driver-class-name: ${DRIVER:org.h2.Driver} username: ${USER:sa} password: ${PASS:}

KHI入社して退社。今はCONFRAGEで正社員です。関西で140-170/80~120万から受け付けております^^
得意技はJS(ES6),Java,AWSの大体のリソースです
コメントはやさしくお願いいたします^^
座右の銘は、「狭き門より入れ」「願わくは、我に七難八苦を与えたまえ」です^^
コメント