技術ネタはQiitaに移りました。壁もどこぞに。

Spring Boot の設定変更

Spring Boot が気になって調べていたり、始めてみたけどよく分からず調べたりしてここに辿り着いた方であれば、既にご存知だとは思うのだが、Spring Boot は、DropWizard などと同様に Web アプリケーションコンテナが組み込まれており、Java さえ実行できれば起動できる Web アプリケーションの作成を行うことができる。

Spring Boot では、組み込みの Tomcat をコンテナに使用することが多いかと思うが、これをそのまま起動すると、Tomcat のデフォルト設定に従い、8080 ポートでサービスが公開される。ただ、多くの場合、他のアプリケーションで既に 8080 ポートを使用していたりして、なるべくであれば 8080 ポートを使用したくない場合のほうが多いのではないかと思う。

で、このような場合どうするかというと、コンテキストルートに application.properties ファイルを作成して、対応するプロパティを上書きしていく。先のようなサービスポートの変更であれば、server.port プロパティに値を設定する。なお、properties でなく、yaml で書いても同様の設定が可能。

また、application.properties 以外にもこの設定を上書きできる箇所は用意されており、 以下のような優先順位で設定が適用される。(番号の小さいものほど設定優先度が高い)

  1. コマンドライン引数
  2. JNDI の java:comp/env 属性
  3. Javaシステムプロパティ
  4. OS の環境変数
  5. random.* プロパティのみ、RandomValuePropertySource の設定
  6. アプリケーション jar パッケージ外の application-プロファイル名.properties、および application-プロファイル名.yml の設定 (クラスパスの通された設定ファイル)
  7. アプリケーション jar パッケージ内の application-プロファイル名.properties、および application-プロファイル名.yml の設定
  8. アプリケーション jar パッケージ外の application.properties、および application.yml の設定 (クラスパスの通された設定ファイル)
  9. アプリケーション jar パッケージ内の application.properties、および application.yml の設定
  10. @Configuration アノテーションの付与されたクラス内の、@PropertySource アノテーションで定義された設定
  11. Spring Boot のデフォルト設定

Spring Boot Reference Guide

この中でも、とくによく使用するのが、コマンドライン引数による設定値の上書きと、application.properties の配置による設定値の上書きの2つ。なお、コマンドライン引数による設定値の上書きは、jar を起動する場合と、mvn コマンドからの起動の場合で、引渡し方が少々異なるようなので注意。

jar 起動時には、以下のようにする。

java -jar bluefairy-0.1.0.jar --server.port=41000 --server.contextPath=/app

Maven 起動時は先ほどとは少し異なり、以下のように --defive オプションで渡す。

mvn spring-boot:run --define server.port=41000 --define server.contextPath=/app

デフォルトで設定可能なすべてのプロパティ一覧は以下。

Appendix A. Common application properties