JVM:SpringBoot TomcatEmbeddedWebappClassLoader

[复制链接]
发表于 2026-2-22 18:43:03 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?立即注册

×
一、先容

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 时,通常不须要直接与 TomcatEmbeddedWebappClassLoader 交互,由于 Spring Boot 的自动设置会为你处理惩罚这些细节。
假如你碰到与类加载干系的标题(如类找不到、类版本辩论等),大概须要查抄你的项目依靠、Spring Boot 的设置或应用的结构。在某些环境下,你大概须要自界说类加载器来满足特定的需求。这通常涉及到高级设置和大概的代码更改,须要审慎处理惩罚。
总之,TomcatEmbeddedWebappClassLoader 是 Spring Boot 内嵌 Tomcat 环境中一个告急的类加载器,它提供了类加载的隔离性、动态性和优化,以支持高性能的 Spring Boot 应用。
二、SpringBoot中TomcatEmbeddedWebappClassLoader与LaunchedURLClassLoader的关系

org.springframework.boot.loader.LaunchedURLClassLoader是TomcatEmbeddedWebappClassLoader的父类加载器

sun.misc.Launcher$AppClassLoader是org.springframework.boot.loader.LaunchedURLClassLoader的父类加载器。
回复

使用道具 举报

登录后关闭弹窗

登录参与点评抽奖  加入IT实名职场社区
去登录
快速回复 返回顶部 返回列表