概要
Spring Bootで開発するアプリケーションにspring-boot-devtoolsを組み込むと、開発が便利になる機能が有効になります。そのうちの1つである"Automatic restart"の設定についてまとめました。
環境
- Windows10 Professional
- Java 1.8.0_101
- Spring Boot 1.4.1
- spring-boot-devtools
参考
- [20. Developer tools] (http://docs.spring.io/spring-boot/docs/current/reference/html/using-boot-devtools.html)
- [Appendix A. Common application properties] (http://docs.spring.io/spring-boot/docs/current/reference/html/common-application-properties.html)
Property defaults
devtoolsの初期設定に関するクラス
- [DevToolsPropertyDefaultsPostProcessor] (https://github.com/spring-projects/spring-boot/blob/v1.4.1.RELEASE/spring-boot-devtools/src/main/java/org/springframework/boot/devtools/env/DevToolsPropertyDefaultsPostProcessor.java)
- [DevToolsProperties] (https://github.com/spring-projects/spring-boot/blob/v1.4.1.RELEASE/spring-boot-devtools/src/main/java/org/springframework/boot/devtools/autoconfigure/DevToolsProperties.java)
- [RemoteDevToolsProperties] (https://github.com/spring-projects/spring-boot/blob/v1.4.1.RELEASE/spring-boot-devtools/src/main/java/org/springframework/boot/devtools/autoconfigure/RemoteDevToolsProperties.java)
Automatic restart
spring boot devtoolsを組み込むと有効になります。
デフォルトではクラスパス上のファイルの変更をトリガーにしてアプリケーションが再起動します。
トリガーの有効/無効の切り替え
デフォルトはtrue
です。
spring:
devtools:
restart:
enabled: true
トリガーの対象外について(デフォルト)
デフォルトは[DevToolsProperties] (https://github.com/spring-projects/spring-boot/blob/v1.4.1.RELEASE/spring-boot-devtools/src/main/java/org/springframework/boot/devtools/autoconfigure/DevToolsProperties.java)で定義されています。
ここで定義されているパターンに当てはまるファイルは再起動のトリガーにはなりません。
spring:
devtools:
restart:
exclude: <DevToolsPropertiesを参照>
トリガーの対象から除外する(追加)
デフォルトは未指定です。
再起動のトリガーの対象から除外したいパターンを追加したい場合に指定します。
複数ある場合はカンマ区切りで指定します。
この例では*.yml、*.xmlを指定しているので、例えばapplication.ymlを修正してもアプリケーションは再起動しなくなります。
spring:
devtools:
restart:
additional-exclude: "**/*.yml, **/*.xml"
トリガーの対象に含める
デフォルトは未指定です。
クラスパス以外のファイルで、再起動のトリガーの対象に含めたいディレクトリを指定します。
複数ある場合は行頭に-を付けて配列で指定します。
spring:
devtools:
restart:
additional-paths:
- src/main/resources/sql
トリガーを特定のファイルに指定する
spring boot devtoolsのデフォルトの状態では、ちょっとした修正を行っただけでもアプリケーションが再起動してしまい、逆に開発を非効率にする場合があります。このような場合には、再起動のトリガーをクラスパス上のファイルではなく特定のファイルに変えることができます。
デフォルトは未指定です。
再起動のトリガーを任意のファイルに指定します。この例では.reloadtrigger
というファイルを指定しています。
このファイルをクラスパス上(src/main/resources)に配置し、再起動したい場合にこのファイルを変更するとアプリケーションが再起動します。
spring:
devtools:
restart:
trigger-file: .reloadtrigger
注意点
- クラスパス上のファイルの変更が無ければトリガーファイルを更新しても再起動しません。
- トリガーファイルはクラスパス上に配置します。クラスパス以外にある場合はadditional-pathsで追加します。
- トリガーファイルの変更はIDE上から行わないと検知されないようです。コンソールからファイルを更新しても再起動しませんでした。
Global settings
spring boot devtoolsの設定は、アプリケーションの設定ファイル(application.properties or yml)に記述しますが、開発者個人の設定を反映させたい場合があると思います。
このような場合は、ユーザーホームディレクトリ下に.spring-boot-devtools.properties
というファイルを作成し、開発者個人の設定を記述することで、反映させることができます。
たとえば
application.properties上では再起動が有効になっているが、個人の環境では無効にしたい場合
spring.devtools.restart.enabled = false
application.properties上ではクラスパス上のファイルがトリガーになっているが、任意のファイルをトリガーにしたい場合
spring.devtools.reload.additional-paths = C:/path/to/directory
spring.devtools.reload.trigger-file = mytrigger
注意点
- .spring-boot-devtools.ymlというyaml形式では認識されませんでした。