この記事は Holmes Advent Calendar 2020 - Qiita 15 日目の記事です。
こんにちは。Holmesでエンジニアをしている毛見です。
最近SpringBootのBootRunに掛かる時間が長く、少しの修正でもBootRunし直さなければならないので、それをせずに変更を反映できるホットスワップについて調べたのでまとめます。
環境
- macOS 10.15.7
- Java11
- Intellij 2020.2.4
- spring initializerによりプロジェクトを生成
- Project : Gradle Project
- SpringBoot : 2.4.1
- Packaging : Jar
- Dependencies : Spring Web, Thymeleaf
設定手順
HotSwapの設定
- intellijのPreferencesでHotSwapの設定を行う。
- Reload classes after compilationの
Always
もしくはAsk
を選択する。
- Reload classes after compilationの
それぞれの設定値の内容は公式ドキュメントを参照
テンプレートの変更を常に反映する設定
この設定をしなくてもHotSwap自体は可能ですが、thymeleafテンプレートは、変更を反映する際の一手間を減らせます。
- application.ymlに
cache: false
を追加
spring: thymeleaf: cache: false
- build.gradleに
sourceResources sourceSets.main
を追加
bootRun { sourceResources sourceSets.main }
HotSwapをする
- BootRunをデバッグ実行
- コードの変更
- inttelijのメニュー/Build/Recompile '編集したファイル名' でコンパイル、もしくはショートカットコマンド
⇧+⌘+F9
- intellijのHotSwapの設定で、Askを選択している場合、intellijにクラスをリロードするか聞かれるのでYesを選択。
テンプレートの変更はthymeleafテンプレートの変更を常に反映する設定している場合、3と4の手順は不要です。ページリロードを行うことで変更したテンプレートが読み込まれます。
HotSwapできない変更
感想
少しコードを修正しただけでもBootRunに1〜2分掛かっていたものが10数秒程度で変更を反映出来るようになったのは良かった。HotSwapについて色々調べて様々な設定方法がありましたが、結果的に必要な設定は少なかったので、費用対効果は良いと思いました。
Holmesではエンジニアを募集しています。興味がある方はご連絡下さい。 lab.holmescloud.com