Spring Boot と IntelliJ IDEA という組み合わせにおいて,Spring Boot に組み込みの Tomcat でホットスワップをやってみます.
前段として,IntelliJ IDEA 13 で Spring Boot を動かすやり方についてはこちら.
IntelliJ IDEA で Spring Boot を動かしてみるメモ
https://hirooka.pro/?p=7524
Stackoverflow で下調べ
spring boot hotswap with Intellij IDE
http://stackoverflow.com/questions/23155244/spring-boot-hotswap-with-intellij-ide
Spring Boot + Spring-Loaded (IntelliJ, Gradle)
http://stackoverflow.com/questions/24371111/spring-boot-spring-loaded-intellij-gradle
まず,DCEVM プラグイン
Get True Hot Swap in Java with DCEVM and IntelliJ IDEA
http://blog.jetbrains.com/idea/2013/07/get-true-hot-swap-in-java-with-dcevm-and-intellij-idea/
DCEVM integration
https://plugins.jetbrains.com/plugin/7245?pr=idea
IntelliJ のメニューの [File] – [Settings…] – [IDE Settings] – [Plugins] の [Browse repositories…] ボタンをクリックします.”DCEVM integration” で検索します. DCEVM integration がヒットすれば,[Install plugin] ボタンをクリックするとプラグインがインストールされます.
しかし,上記 blog.jetbrains.com のメッセージのやり取りを読むと,Maven には対応していない…? たしかに Maven の場合,”Use alternative JRE” を設定する箇所が無いようです.そのため試していません…
次に,HotswapAgent
HotswapProjects/HotswapAgent
https://github.com/HotswapProjects/HotswapAgent
バイナリも用意されているものの,ソースからビルドしたほうが良さそうなのと,インストールしたりしないといけないようなので試していません…
続いて,”ホットスワップ” とは違いますが,リロードを行う JRebel
JRebel
http://zeroturnaround.com/software/jrebel/
有料なので試していません…
最後に Spring Loaded
67.6 Reload Java classes without restarting the container
http://docs.spring.io/spring-boot/docs/current/reference/html/howto-hotswapping.html#howto-reload-java-classes-without-restarting
spring-projects/spring-loaded
https://github.com/spring-projects/spring-loaded
springloaded-1.2.1.RELEASE.jar をダウンロードし,適当なパスに配置させます.
sudo cp springloaded-1.2.1.RELEASE.jar /usr/local/bin/
IntelliJ のメニューの [File] – [Settings…] – [IDE Settings] – [Debugger] – [HotSwap] を設定します.デフォルトでは…
“Make project before reloading classes” にチェックが入っており,そのままにしておきます.
“Enable ‘JVM will hang’ warning” にチェックが入っておらず,そのままにしておきます.
“Reload classes in background” にチェックが入っており,そのままにしておきます.
“Reload classes after compilation” で Ask が選択されていますが,Always に設定しておきます.
IntelliJ のメニューの [File] – [Settings…] – [Project Settings] – [Compiler] を確認してみます.デフォルトでは,”Make project automatically” にはチェックが入っていません.さらに “only works while not running / debugging” と書かれています.今回は [Run] – [Debug] している状態というのが前提なので,この項目をチェックしていたとしても自動で Make されないようです.
IntelliJ のメニューの [Run] – [Edit Configurations…] で,Maven で spring-boot:run させている Configuration を開き,[Runner] タブをクリックし,[Use project settings] のチェックを外し,[VM Options] を設定します.例えば,
-javaagent:/usr/local/bin/springloaded-1.2.1.RELEASE.jar -noverify
準備ができたので,IntelliJ のメニューで [Run] – [Run “”], あるいは [Run] – [Debug “”] します.組み込みの Tomcat が起動し,ウェブアプリケーションが動いていることを確認します.
任意のソースの任意の箇所を修正,保存し,[Build] – [Compile “”] ([Ctrl] + [Shift] + [F9]) します.Debug の Console や Event Log が更新されます.Tomcat を再起動することなく,ソースの変更がウェブアプリケーションに反映されていることを確認します.