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
デフォルトで設定可能なすべてのプロパティ一覧は以下。