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

IDEA部署Spring War包到Tomcat报com.mysql.jdbc.Driver类找不到排查

核心根因

从报错栈、Tomcat启动正常但Web上下文初始化中断的特征,以及pom配置中mysql驱动的作用域设置可以判定,本次ClassNotFoundException的触发原因和版本兼容、Spring配置类错误无关,本质是类加载路径不匹配:

Maven中provided作用域的规则为:该依赖仅参与项目编译、测试阶段的类加载,打War包时不会将Jar包打入应用的WEB-INF/lib目录,运行时需要由Tomcat容器自身的公共类加载路径提供对应类。

你当前本地部署的Tomcat 9.0.43公共类路径下没有放置MySQL驱动Jar包,Webapp类加载器扫描应用内部路径找不到com.mysql.jdbc.Driver类,就会直接抛出类找不到异常,连锁导致dataSource、entityManagerFactory等依赖数据库连接的Bean初始化失败。

可落地的解决方案

根据你的使用场景二选一执行即可:

  • 方案1:调整依赖作用域(适配本地开发、常规独立部署场景,操作最简单)
    打开项目pom.xml,找到mysql-connector-java的依赖配置,删除其中的<scope>provided</scope>行,使用默认的compile作用域,示例配置:
    <dependency>
        <groupId>mysql</groupId>
        <artifactId>mysql-connector-java</artifactId>
        <!-- 版本号保持你项目原本使用的版本即可,无需强制升级 -->
    </dependency>
    
    配置完成后在Maven面板执行clean操作,重新构建War包部署即可。注意检查Spring配置中的驱动类名和引入的驱动版本是否匹配:5.x版本的mysql驱动对应类名是com.mysql.jdbc.Driver,8.x版本的mysql驱动对应类名是com.mysql.cj.jdbc.Driver,如果改完作用域还报类找不到,优先核对这里的类名配置。
  • 方案2:保留provided作用域,手动为Tomcat挂载驱动(适配生产环境统一管理驱动的场景)
    如果你需要保留provided作用域(比如公司生产环境的Tomcat预统一放置数据库驱动,避免每个应用重复打包驱动),执行两步操作即可:
    1. 下载和项目版本匹配的mysql-connector-java Jar包,放入Tomcat安装目录的lib文件夹(和tomcat.jar、tomcat-juli.jar同层级,该路径是Tomcat公共类加载器的扫描范围)
    2. 重启Tomcat后重新部署应用,类加载器即可从公共路径加载到驱动类。
部署后校验注意事项
  • 改完配置后一定要执行Mavenclean操作,避免本地缓存的旧War包没有同步更新配置,导致修改不生效
  • 如果使用IDEA的本地Tomcat运行配置,检查「Deployment」标签页下挂载的制品,确认WEB-INF/lib路径下已经包含mysql驱动Jar包,不要直接复用之前未更新的旧制品
  • 不要手动在Web应用的WEB-INF目录下放置驱动Jar包,优先通过Maven依赖管理同步版本,避免出现驱动版本和代码不兼容的问题

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.25 22:54:01