ContractS開発者ブログ

契約マネジメントシステム「ContractS CLM」の開発者ブログです。株式会社HolmesはContractS株式会社に社名変更しました。

SpringBoot + Intellij でホットスワップをする

この記事は 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を選択する。

Preferences | Build, Execution, Deployment | Debugger | HotSwap

それぞれの設定値の内容は公式ドキュメントを参照

テンプレートの変更を常に反映する設定

この設定をしなくてもHotSwap自体は可能ですが、thymeleafテンプレートは、変更を反映する際の一手間を減らせます。

  • application.ymlに cache: falseを追加
spring:
    thymeleaf:
        cache: false
  • build.gradleにsourceResources sourceSets.mainを追加
bootRun {
    sourceResources sourceSets.main
}

HotSwapをする

  1. BootRunをデバッグ実行
  2. コードの変更
  3. inttelijのメニュー/Build/Recompile '編集したファイル名' でコンパイル、もしくはショートカットコマンド ⇧+⌘+F9
  4. intellijのHotSwapの設定で、Askを選択している場合、intellijにクラスをリロードするか聞かれるのでYesを選択。

テンプレートの変更はthymeleafテンプレートの変更を常に反映する設定している場合、3と4の手順は不要です。ページリロードを行うことで変更したテンプレートが読み込まれます。

HotSwapできない変更

感想

少しコードを修正しただけでもBootRunに1〜2分掛かっていたものが10数秒程度で変更を反映出来るようになったのは良かった。HotSwapについて色々調べて様々な設定方法がありましたが、結果的に必要な設定は少なかったので、費用対効果は良いと思いました。


Holmesではエンジニアを募集しています。興味がある方はご連絡下さい。 lab.holmescloud.com