You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Tomcat 9.0.37版本缓存依赖失效(9.0.20正常)伴随Spring Bean创建异常

问题根因定位

你遇到的报错核心是ParallelWebappClassLoader无法完成TaxLotsServiceImpl的类自省,本质是该类依赖的缓存相关类在Tomcat 9.0.37+的新类加载规则下无法被正常加载,可按照如下步骤定位具体原因:

  • 服务启动时添加JVM参数-verbose:class,过滤com.frk.fds和缓存组件(如Spring Cache、Ehcache、Redis客户端等)的类加载日志,确认是否存在类加载失败、找不到对应类的记录。
  • 核对Tomcat官方变更记录:9.0.37版本默认开启了ParallelWebappClassLoader的并行类加载能力,同时收紧了Web应用类加载器对父加载器资源的访问权限,该改动会直接影响依赖反射扫描类元数据的Spring容器初始化流程。
  • 检查项目Spring框架版本:如果Spring核心版本低于5.2.10.RELEASE、Spring Boot版本低于2.3.4.RELEASE,会存在和Tomcat新并行类加载器的兼容性bug,旧版本Spring的类自省逻辑无法适配ParallelWebappClassLoader的并发类加载机制,导致扫描TaxLotsServiceImpl的方法元数据时失败。
  • 检查缓存依赖的scope配置:如果缓存相关依赖的scope被设为provided,Tomcat新版本下父加载器默认不会加载该类,会直接导致应用类加载时找不到依赖类。
解决方案

可根据项目实际情况选择以下任意一种方案修复:

  • 方案1(适配速度最快,无需修改业务代码/依赖):在应用的META-INF/context.xml中添加如下配置,关闭当前应用的并行类加载能力,回退到9.0.20版本的类加载逻辑:
<Context>
  <Loader parallelClassLoading="false" />
</Context>

如果需要全局生效,可直接修改Tomcat安装目录下的conf/context.xml添加上述配置。

  • 方案2(一劳永逸修复兼容性问题):将Spring核心版本升级到5.2.10.RELEASE及以上,Spring Boot版本升级到2.3.4.RELEASE及以上,该版本已经官方修复了和Tomcat 9.0.37+类加载器的兼容性问题。
  • 方案3(修正依赖配置错误):检查所有缓存相关依赖的包管理配置,将scope从provided改为默认的compile(Maven)或者implementation(Gradle),确保缓存相关类会被打包到应用的WEB-INF/lib目录下,能被Web应用类加载器正常加载。

内容的提问来源于stack exchange,提问作者user3582545

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.28 22:36:07