Maven WAR JSP项目连接MySQL报错:找不到合适驱动求排查方案
从你的报错和配置来看,核心问题是MySQL 8.x的JDBC驱动配置和旧版本有差异,加上一些细节没到位,导致无法正确建立连接。这里给你几个针对性的解决思路:
1. 修正JDBC驱动类名
MySQL 8.x已经废弃了旧的com.mysql.jdbc.Driver驱动类,改用com.mysql.cj.jdbc.Driver。你当前的<sql:setDataSource>里用了旧类名,这会导致Tomcat无法找到正确的驱动实现。
修改后的代码示例:
<sql:setDataSource var="mystraDB" driver="com.mysql.cj.jdbc.Driver" url="jdbc:mysql://localhost:3306/mystra?useSSL=false&serverTimezone=UTC" user="root" password="###"/>
2. JDBC URL必须添加时区参数
MySQL 8.x强制要求设置数据库时区,否则会抛出连接异常,这也是导致"无合适驱动"报错的常见诱因之一。在URL末尾添加serverTimezone参数,比如用UTC或者你本地的时区(比如Asia/Shanghai),同时建议关闭SSL(开发环境下)避免额外警告。
3. 确认驱动包的部署状态
虽然你已经把mysql-connector-java-8.0.21.jar放到Tomcat的lib目录,但请再检查这几点:
- 确保Tomcat已经完全重启(不是热部署,要停止后再启动),否则新添加的驱动不会被加载。
- 确认驱动包没有损坏,文件大小和官方下载的一致。
- 检查Tomcat的
lib目录里有没有其他版本的MySQL驱动,避免版本冲突。
4. 调整Maven依赖的范围
你的pom.xml里mysql驱动依赖是默认的compile范围,这会把驱动包打包进WAR的WEB-INF/lib目录,和Tomcatlib里的驱动形成重复,可能引发类加载冲突。建议把依赖范围改成provided,告诉Maven这个驱动由容器(Tomcat)提供:
<dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> <version>8.0.21</version> <scope>provided</scope> </dependency>
额外排查步骤
如果以上步骤还是没解决问题,可以查看Tomcat的logs/catalina.out日志,里面会有更详细的异常栈,能帮你定位是驱动加载失败还是连接参数错误。比如如果驱动类找不到,日志里会出现ClassNotFoundException的明确信息。
内容的提问来源于stack exchange,提问作者M2evorah

