Spring Boot Devtoolsでホットデプロイ(自動リロード)する方法
Spring Boot Devtoolsでホットデプロイ(自動リロード)する方法です。
コードを書いた後、修正を反映するのに Spring Boot App を停止しては起動って・・・超メンドクサイですよね。非常に生産性が悪いし、処理を書くたびに動作確認したい自分としてはストレスしかありませんでした^^;
そんで、S2Container のようなホットデプロイする方法がないかと思って調べたところ、"Spring Boot devtools" というものがあったので試してみました。
"SilentExitException" が発生したりと色々ありましたが、とりあえず動作しているのでヨシとしましたよ。
ここでは Spring Boot Devtoolsでホットデプロイ(自動リロード)する方法 を紹介します。
環境
今回のサンプルアプリ構築環境です。
- Spring Boot 1.4.1
- Thymeleaf 3.0.2
- Windows7
- Java8
- Eclipse 4.6 Neon
こちらのページを参考にサンプルアプリを作ってください。既にSpringBootアプリがある場合は、読み飛ばして結構です。
pom.xmlを編集する
pom.xml の dependencies に下記を追加します。
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-devtools</artifactId>
</dependency>
はい、これでおしまいです。後は Maven ビルドで OK。超簡単ですね^^
起動時のログ出力が [ main] から [ restartedMain] へ変わります。
ソースコード変更後の再起動は 2~3秒程度です。
補足としては、
- JVM 実行中にクラスをリロードするのではなく、クラスパスのリソースに変更があったら自動リスタートする。
- java -jarで起動された場合は、"production" 扱いとして自動リスタートしない。
- 自動リスタート機能以外にも、デフォルトプロパティ、ライブリロード、リモートアプリケーション対応の機能がある。
って感じでしょうか。
SilentExitExceptionが発生する
デバッグモードで Spring Boot App を実行するたびに、スレッドは SilentExitException をスローして停止します。 もちろんブレークポイントは設定していません。
・SilentExitExceptionHandler
public static void exitCurrentThread() {
throw new SilentExitException();
}
どうもこれは spring-boot-devtools のバグっぽいですね。
・java - Breakpoint at throw new SilentExitException() in Eclipse + Spring Boot - Stack Overflow
とりあえず Eclipce メニューの「ウィンドウ」-「設定」-「Java」-「デバッグ」から、「キャッチされない例外で実行を中断」のチェックを外すことで対応しました。
まとめ
Spring Boot Devtoolsでホットデプロイ(自動リロード)する方法しました。
Spring Boot devtools のリスタートは、今のところそれほどストレスにもなってませんし、これでサクサク開発が進められそうな気がします。まだ試してない、ライブリロードやリモートアプリケーション対応の機能などは様子をみて試してみようと思っています。
おつかれさまでした。