Spring Boot Devtoolsでホットデプロイ(自動リロード)する方法

Spring Boot Devtoolsでホットデプロイ(自動リロード)する方法です。

Spring Boot Devtoolsでホットデプロイ(自動リロード)する方法

コードを書いた後、修正を反映するのに Spring Boot App を停止しては起動って・・・超メンドクサイですよね。非常に生産性が悪いし、処理を書くたびに動作確認したい自分としてはストレスしかありませんでした^^;

そんで、S2Container のようなホットデプロイする方法がないかと思って調べたところ、"Spring Boot devtools" というものがあったので試してみました。

"SilentExitException" が発生したりと色々ありましたが、とりあえず動作しているのでヨシとしましたよ。

ここでは Spring Boot Devtoolsでホットデプロイ(自動リロード)する方法 を紹介します。


環境

pom.xmlを編集する

pom.xml の dependencies に下記を追加します。

<dependency>
  <groupId>org.springframework.boot</groupId>
  <artifactId>spring-boot-devtools</artifactId>
</dependency>

はい、これでおしまいです。後は Maven ビルドで OK。超簡単ですね^^

起動時のログ出力が [ main] から [ restartedMain] へ変わります。

ソースコード変更後の再起動は 2~3秒程度です。

補足としては、

  1. JVM 実行中にクラスをリロードするのではなく、クラスパスのリソースに変更があったら自動リスタートする。
  2. java -jarで起動された場合は、"production" 扱いとして自動リスタートしない。
  3. 自動リスタート機能以外にも、デフォルトプロパティ、ライブリロード、リモートアプリケーション対応の機能がある。

って感じでしょうか。

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]-[デバッグ]から、「キャッチされない例外で実行を中断」のチェックを外すことで対応しました。

Eclipse キャッチされない例外で実行を中断

まとめ

Spring Boot Devtoolsでホットデプロイ(自動リロード)する方法しました。

Spring Boot devtools のリスタートは、今のところそれほどストレスにもなってませんし、これでサクサク開発が進められそうな気がします。まだ試してない、ライブリロードやリモートアプリケーション対応の機能などは様子をみて試してみようと思っています。

おつかれさまでした。

この記事がお役に立ちましたら シェア をお願いいたします。