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 以外にもこの設定を上書きできる箇所は用意されており、
以下のような優先順位で設定が適用される。(番号の小さいものほど設定優先度が高い)
- コマンドライン引数
- JNDI の
java:comp/env属性 - Java のシステムプロパティ
- OS の環境変数
random.*プロパティのみ、RandomValuePropertySourceの設定- アプリケーション jar パッケージ外の
application-プロファイル名.properties、およびapplication-プロファイル名.ymlの設定 (クラスパスの通された設定ファイル) - アプリケーション jar パッケージ内の
application-プロファイル名.properties、およびapplication-プロファイル名.ymlの設定 - アプリケーション jar パッケージ外の
application.properties、およびapplication.ymlの設定 (クラスパスの通された設定ファイル) - アプリケーション jar パッケージ内の
application.properties、およびapplication.ymlの設定 @Configurationアノテーションの付与されたクラス内の、@PropertySourceアノテーションで定義された設定- Spring Boot のデフォルト設定
この中でも、とくによく使用するのが、コマンドライン引数による設定値の上書きと、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
デフォルトで設定可能なすべてのプロパティ一覧は以下。