Spring3问题之-org.gjt.mm.mysql.Driver not found

本文探讨了在Spring 3.1环境下遇到的mysql驱动找不到的问题,并分享了解决方案:将mysql驱动包放置于JAVA的EXT目录下。此外,文章还提到了因使用特定的数据源导致的commons-dbcp.jar缺失问题。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

其实这个问题灰常简单了,一般是classpath中没有mysql驱动包,配置上了就不会报错了。但是在使用spring3.1过程中发现一个很奇怪的问题,jar包已经在classpath中了,但是启动后只要调用到数据库就会报org.gjt.mm.mysql.Driver找不到,这个问题困扰了很多天,后面百度之后将mysql驱动包放在java的EXT扩展目录下后,一切运行OK。虽然问题解决了,但是如果部署每次都要把jar包放到JDK的lib包下还是很麻烦。经过后续分析,发现applicationcontext文件的数据源“org.apache.tomcat.dbcp.dbcp.BasicDataSource”(在commons-dbcp.jar中)在工程中不存在,很奇怪的是为什么spring启动容器的事后没有报错呢?single单例的都是启动容器时加载的啊,按理应该会提示类找不到。
哎暂时先把“commons-dbcp.jar”放到路径中用吧,原因后面再想想吧。
### 解决方案 此问题的核心在于 `org.gjt.mm.mysql.Driver` 类已被弃用并替换为新的驱动类名。以下是详细的解决方案: #### 1. **确认 MySQL 驱动版本** 如果使用的 MySQL 数据库版本较高(如 8.x),则应使用较新的驱动程序,例如 `mysql-connector-java-8.x.x.jar`。然而,新版本的驱动不再支持旧的驱动类名称 `org.gjt.mm.mysql.Driver`,而是推荐使用 `com.mysql.cj.jdbc.Driver`[^2]。 #### 2. **调整 JDBC URL 和驱动类** 对于 MySQL 8.x 版本及以上,JDBC URL 的配置也需要更新。以下是一个标准的 JDBC URL 格式: ```plaintext jdbc:mysql://<host>:<port>/<database>?serverTimezone=UTC&useSSL=false ``` 此外,在代码中指定正确的驱动类名: ```java Class.forName("com.mysql.cj.jdbc.Driver"); ``` 或者如果不需要显式加载驱动类,则可以省略上述语句,因为现代 JDBC 实现会自动检测可用的驱动。 #### 3. **下载合适的驱动版本** 若项目确实需要兼容旧版驱动类名 `org.gjt.mm.mysql.Driver`,可下载对应的低版本驱动(如 `mysql-connector-java-5.1.47.jar`)。具体操作如下: - 访问 [MySQL 官方存档页面](https://downloads.mysql.com/archives/c-j/) 下载所需版本。 - 将下载的 `.jar` 文件放置到项目的依赖目录中(如 Maven 的 `lib` 目录或 Kettle 的 `lib` 目录)[^3]。 #### 4. **验证驱动是否正确安装** 确保所选 `.jar` 文件包含所需的驱动类。可以通过解压 `.jar` 文件来检查是否存在目标类路径。例如,对于 `mysql-connector-java-5.1.47.jar`,应该能够找到 `org/gjt/mm/mysql/Driver.class` 文件[^4]。 #### 5. **Kettle 中的具体处理方法** 如果是在 Kettle(PDI)环境中遇到该问题,需执行以下步骤: - 下载适合的驱动版本(如 `mysql-connector-java-5.1.47.jar`)。 - 将其复制到 Kettle 的 `lib` 目录下。 - 重启 Kettle 应用程序以使更改生效。 --- ### 示例代码 以下是一段基于 Java 的数据库连接示例,适用于 MySQL 8.x 及更高版本: ```java import java.sql.Connection; import java.sql.DriverManager; import java.sql.SQLException; public class MysqlConnectionExample { public static void main(String[] args) { String url = "jdbc:mysql://localhost:3306/testdb?serverTimezone=UTC"; String user = "root"; String password = "password"; try (Connection conn = DriverManager.getConnection(url, user, password)) { System.out.println("Connected to database successfully!"); } catch (SQLException e) { System.err.println("Failed to connect to database: " + e.getMessage()); } } } ``` 注意:无需手动调用 `Class.forName()` 方法,除非使用的是非常老的 JDK 版本。 --- ###
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值