Spring Boot と IntelliJ IDEA という組み合わせにおいて,Spring Boot に組み込みの Tomcat でホットスワップ

スポンサーリンク

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 を再起動することなく,ソースの変更がウェブアプリケーションに反映されていることを確認します.

IntelliJSpring
スポンサーリンク
コピペワールド