技術共有

JVM:SpringBoot TomcatEmbeddedWebappClassLoader

2024-07-12

한어Русский языкEnglishFrançaisIndonesianSanskrit日本語DeutschPortuguêsΕλληνικάespañolItalianoSuomalainenLatina

1. はじめに

TomcatEmbeddedWebappClassLoader は、Spring Boot によって埋め込まれた Tomcat コンテナ内で使用されるクラス ローダー (ClassLoader) です。 Spring Boot アプリケーションでは、アプリケーションを実行可能な JAR または WAR ファイルにパッケージ化することを選択し、組み込み Tomcat サーバーでアプリケーションを実行する場合、TomcatEmbeddedWebappClassLoader が重要な役割を果たします。

役割と機能

  • 分離 : TomcatEmbeddedWebappClassLoader はクラス ロードの分離を提供します。これは、異なる Spring Boot アプリケーション (またはアプリケーションの異なる部分) が、互いのクラス ロード プロセスを妨げることなく同じ JVM で実行できることを意味します。これは、クラスのバージョンの競合などの問題を防ぐのに役立ちます。
  • 動的: 組み込み Tomcat 環境では、アプリケーションはクラスを動的にロードおよびアンロードできます。これは、開発者がサーバー全体を再起動せずにコード変更の影響をリアルタイムで確認できるため、開発中に特に役立ちます。
  • 最適化: このクラスローダーは、実稼働環境の高性能アプリケーションにとって重要な、起動時間とランタイム メモリ フットプリントを最小限に抑えるように最適化されています。

Spring Bootとの関係
Spring Boot の自動構成 (Auto-configuration) メカニズムでは、アプリケーションを組み込み Tomcat で実行する必要があることが検出されると、Spring Boot は自動的に Tomcat サーバーを構成し、アプリケーションをロードする適切なクラス ローダー (TomcatEmbeddedWebappClassLoader など) を選択します。クラスとリソース。

代替案
TomcatEmbeddedWebappClassLoader は Spring Boot の組み込み Tomcat 環境のデフォルトの選択ですが、Spring Boot は Jetty や Undertow などの他の組み込みサーバーもサポートしています。各サーバーには、さまざまなニーズや環境に合わせて独自のクラスローダー実装があります。

予防
Spring Boot の組み込み Tomcat を使用する場合、これらの詳細は Spring Boot の自動構成によって処理されるため、通常は TomcatEmbeddedWebappClassLoader と直接対話する必要はありません。
クラスの読み込みに関連する問題 (クラスが見つからない、クラスのバージョンの競合など) が発生した場合は、プロジェクトの依存関係、Spring Boot 構成、またはアプリケーション構造を確認する必要がある場合があります。場合によっては、特定のニーズに合わせてクラス ローダーをカスタマイズする必要がある場合があります。これには高度な構成やコード変更が含まれることが多く、慎重に扱う必要があります。

つまり、TomcatEmbeddedWebappClassLoader は、Spring Boot 組み込み Tomcat 環境における重要なクラス ローダーであり、クラス ローディングの分離、ダイナミクス、および最適化を提供して、高性能 Spring Boot アプリケーションをサポートします。

2. SpringBoot における TomcatEmbeddedWebappClassLoader と LaunchedURLClassLoader の関係

org.springframework.boot.loader.LaunchedURLClassLoader は TomcatEmbeddedWebappClassLoader の親クラス ローダーです。

ここに画像の説明を挿入します
sun.misc.Launcher$AppClassLoaderはいorg.springframework.boot.loader.LaunchedURLClassLoader親クラスローダー。