ホットスワップ

Spring Boot はホットスワップをサポートしています。このセクションでは、その仕組みに関する質問に回答します。

静的コンテンツをリロードする

ホットリロードにはいくつかのオプションがあります。推奨されるアプローチは、spring-boot-devtools を使用することです。これは、アプリケーションの高速再起動や LiveReload のサポートなどの追加の開発時機能や、実用的な開発時構成 (テンプレートキャッシュなど) を提供するためです。Devtools は、クラスパスの変更を監視することによって機能します。これは、変更を有効にするには、静的リソースの変更を「ビルド」する必要があることを意味します。デフォルトでは、変更を保存すると、Eclipse でこれが自動的に行われます。IntelliJ IDEA では、プロジェクトの作成コマンドによって必要なビルドがトリガーされます。デフォルトの再起動除外のため、静的リソースへの変更はアプリケーションの再起動をトリガーしません。ただし、ライブリロードはトリガーされます。

あるいは、IDE で実行する(特にデバッグをオンにした)ことは、開発を行うための良い方法です(すべての最新の IDE は静的リソースの再読み込みを許可し、通常 Java クラス変更のホットスワップも許可します)。

最後に、Maven および Gradle プラグインを構成して(addResources プロパティを参照)、ソースから直接静的ファイルをリロードするコマンドラインからの実行をサポートできます。より高いレベルのツールを使用してコードを記述している場合は、外部の css/js コンパイラープロセスで使用できます。

コンテナーを再起動せずにテンプレートをリロードする

Spring Boot でサポートされているテンプレートテクノロジのほとんどには、キャッシュを無効にする構成オプションが含まれています (このドキュメントで後述します)。spring-boot-devtools モジュールを使用する場合、これらのプロパティは開発時に自動的に構成されます。

Thymeleaf テンプレート

Thymeleaf を使用する場合は、spring.thymeleaf.cache を false に設定します。他の Thymeleaf カスタマイズオプションについては、ThymeleafAutoConfiguration [GitHub] (英語) を参照してください。

FreeMarker テンプレート

FreeMarker を使用する場合は、spring.freemarker.cache を false に設定します。他の FreeMarker カスタマイズオプションについては、FreeMarkerAutoConfiguration [GitHub] (英語) を参照してください。

Groovy テンプレート

Groovy テンプレートを使用する場合、spring.groovy.template.cache を false に設定します。他の Groovy カスタマイズオプションについては、GroovyTemplateAutoConfiguration [GitHub] (英語) を参照してください。

高速アプリケーション再起動

spring-boot-devtools モジュールには、自動アプリケーション再起動のサポートが含まれています。JRebel (英語) などのテクノロジーほど高速ではありませんが、通常は「コールドスタート」よりも大幅に高速です。このドキュメントで後述する、より複雑なリロードオプションのいくつかを調査する前に、おそらく試してみるべきです。

詳細については、開発者ツールセクションを参照してください。

コンテナーを再起動せずに Java クラスをリロードする

最新の IDE(Eclipse、IDEA など)の多くは、バイトコードのホットスワップをサポートしています。クラスまたはメソッドのシグネチャーに影響を与えない変更を加えた場合、副作用なしできれいにリロードする必要があります。