Spring Bootでapplication.properties(yml)を環境によって分ける方法

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タスク」欄を以下のように設定します。

Spring Bootでapplication.properties(yml)を環境によって分ける方法 ※複数タスク実行する場合は半角スペース空けて指定

「プロジェクト設定」タブで引数を指定します。

Spring Bootでapplication.properties(yml)を環境によって分ける方法

envにtestという変数を指定しました。

これでassembleをすると、spring.profiles.activeがtestに変わってjarやwarファイルが作成されるようになり、自動でapplication.ymlのファイル内が変更されます。

コマンドラインでビルド

gradlew.batが配置されているディレクトリでビルドすることができます。

アセンブル

gradlew.bat assemble

クリーン

gradlew.bat clean

引数を渡したい場合、以下のように渡せばよいです。

gradlew.bat assemble -Denv=dev

コメント

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