本番と開発環境で設定を切り替える
その0: 環境変数や Java 引数
納品しない Web App なら、これが一番良いと思いますが、それが使えない時に2パターンほど。
その1: application-dev.yml を常に参照して、ビルドシステムで本番用の jar/war には入れない
メリット: application-dev.yml にセンシティブな情報が入っていても、お客さんの手元の jar には含まれない
デメリット: リリース版の jar で何かがおかしいときに、簡単に -Dspring.profiles.active=dev
にして動かしてみるということができない。
→ ISV 向け
やり方
まずこんな感じで二つファイルを設置
src/main/resources/
├── application-dev.yml
└── application.yml
application.yml では spring.profiles.include: dev
を追加しておく
gradle で exclude の設定
build.gradle
sourceSets.main.resources.excludes << '**/application-dev.yml'
ビルド後のファイルに、開発用ファイルが含まれていないことを確認。
% gradle clean assemble
:compileJava
:classes
:findMainClass
:jar
:bootRepackage
BUILD SUCCESSFUL
Total time: 2.065 secs
% jar -tvf build/libs/*.jar | grep yml
157 Sun Apr 23 16:41:50 JST 2017 BOOT-INF/classes/application.yml
その2: 本番には devtools を入れずに、devtools 有無で本番 war かどうかを判定
メリット: 基本的に全部 Java の世界で話しが終わる。
デメリット: 本番 jar にも、参照されない application-dev.yml が含まれる。環境変数利用して、開発用のプロファイルで動かしてみることができる。
→ 社内でサーバーが動く Web 向け