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が配置されているディレクトリでビルドすることができます。
アセンブル
1 |
gradlew.bat assemble |
クリーン
1 |
gradlew.bat clean |
引数を渡したい場合、以下のように渡せばよいです。
1 |
gradlew.bat assemble -Denv=dev |
KHI入社して退社。今はCONFRAGEで正社員です。関西で140-170/80~120万から受け付けております^^
得意技はJS(ES6),Java,AWSの大体のリソースです
コメントはやさしくお願いいたします^^
座右の銘は、「狭き門より入れ」「願わくは、我に七難八苦を与えたまえ」です^^