JVM:SpringBoot TomcatEmbeddedWebappClassLoader

一、介绍

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$AppClassLoaderorg.springframework.boot.loader.LaunchedURLClassLoader的父类加载器。

  • 31
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

玉成226

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值