SpringBootの開発に自動リロード(ホットデプロイ)を導入する
はじめに
SpringBootの開発の流れは、
1. コードを書く
2. [Run As]→[Spring Boot App]で起動
3. 動作確認する
4. コードを書く
5. Consoleから起動中のアプリをTerminate
6. [Run As]→[Spring Boot App]で起動
7. 3に戻る
としていたが、
いちいち修正を反映するのに停止して起動するのは煩わしい。
1つ処理を書くたびに動作確認したいタイプなので、開発効率が悪くなってしまう。
S2Containerにはホットデプロイあって楽だったなぁ・・・と思ったので同様の仕組みを調べてみた。
- JRebel(http://samuraism.com/products/zeroturnaround/jrebel)
- SpringLoaded(https://github.com/spring-projects/spring-loaded)
- SpringBootDevTools(http://docs.spring.io/spring-boot/docs/current/reference/html/using-boot-devtools.html)
Springという名前が付いているし、JRebelは商用(myJRebelというフリー版もあるようだが)なので、SpringLoadedとSpringBootDevToolsを試してみる。
SpringLoaded
特徴
特徴としては、
とのこと。
導入方法
jarをダウンロードし、
JVMの実行時の引数でそのファイルを指定するだけ。
https://github.com/spring-projects/spring-loaded
のInstallationに最新JARへのリンクが貼ってあるのでダウンロードして適当な場所に配置する。
STSを使っている場合、
[Run]→[Run Configurations..]を開き、
左のメニューから"Spring Boot App"を選択する。
右側のArgumentsタブのVM argumentsに下記を指定する。
-javaagent:[SpringLoadedのJARファイルへのパス] -noverify
例えばSampleWebProjectというプロジェクトフォルダ配下のtool\springloaded-1.2.5.RELEASE.jarに配置した場合、下記のようになる。
- javaagent:${workspace_loc:SampleWebProject}\tool\springloaded-1.2.5.RELEASE.jar -noverify
この設定を行ったうえで起動すると、
ソースコードを保存するたびに変更が読み込まれ、反映されるようになる。
コンソールに特に何も出ないのでわかりづらいが、1,2秒後には反映されていた。
クラス追加には対応していないかと思っていたが、
新規クラスを追加してコントローラでそのインスタンスを使う処理を足してみても問題なく動作した。
Spring Boot Dev Tools
まとめ
どちらも速度的には実用レベルだったが、せっかくSpringBootで開発するのでSpringBootDevToolsを利用しようと思う。
DevToolsの方が後発で、リスタートの方が何をやっているかわかりやすくて安心ということもある。
ライブリロードなどは便利なのかわからないがひとまず有効にして様子を見てみるつもり。