Intro
SpringBootは設定をapplication.yml(properties)で管理するが、システムプロパティやコマンドライン引数で上書きすることができる。
もちろんprofileを用意して切り替える形でも良いと思うんだけど、環境依存系の設定の場合、環境変数を利用するなどして、環境側から渡してあげると使い勝手がよくなると思う。(12Factor's App的な)
個人的にはアプリケーションで指定された環境変数を入れておくよりは、環境側から引数で明示的に渡してあげるような形式が好み。
環境から渡すことが検討に値しそうなプロパティをまとめておく。
コマンド例
java -jar hogeapp.jar \
--spring.datasource.username=${HOGEAPP_USERNAME} \
--spring.datasource.password=${HOGEAPP_PASSWORD} \
--spring.datasource.url=${HOGEAPP_DATASOURCE_URL} \
--server.port=${HOGEAPP_PORT} \
--server.servlet.context-path="/stg" \
--logging.file="/var/log/hogeapp.log" \
--logging.level.root=WARN \
&
spring.datasource.*
- spring.datasource.username
- spring.datasource.password
- spring.datasource.url
- etc
DBの接続先などは環境によって変わるものだし、外から渡すことを前提にしてもよいかもしれない。
ユーザやパスワードについては管理方法次第だと思うが、アプリケーションから管理を引きはがせるメリットがある。
管理方針によっては有用な気がする。
server.port
SpringBootの起動ポートを切り替えることができる。
--server.port=9000
にした場合、 localhost:9000
で起動する。
SpringBootアプリケーションの手前にWebサーバを立てることは多いと思うので、Portの管理を環境に任せられる。
server.servlet.context-path
コンテキストパスを変更することができる。
環境の違いはドメインで表現する手も有りだと思うが、 /dev
, /stg
, /prd
のようにコンテキストパスで表現するというのはどうだろうか。
※SpringBoot2.0でプロパティ名が変わる模様(元々は server.context-path
)
--logging.*
- logging.file
- logging.level.root
SpringBootはログを標準出力するが、logging.fileを渡すとそちらに書き出してくれる。
ローテートはデフォルトだとサイズ(10MB)でされるようだ。
levelも変更できるので、ログの管理方針によってはありかもしれない。
停止
プロセスIDでKillする。
$ pgrep -f 'hogeapp.jar'
$ kill -TERM {プロセスID}
参考