The driver is automatically registered via the SPI and manual loading of the driver class is general

报错信息

Loading class com.mysql.jdbc.Driver'. This is deprecated. The new driver class iscom.mysql.cj.jdbc.Driver’.
The driver is automatically registered via the SPI and manual loading of the driver class is generally unnecessary

在这里插入图片描述

问题原因

  1. 升级后的mysql驱动类,Driver位置由com.mysql.jdbc.Driver 变为com.mysql.cj.jdbc.Driver
    2.mysql版本过高

解决方案

  1. 将配置文件dataSource.xml中的spring.datasource.driver-class-name=com.mysql.jdbc.Driver修改为如下
    spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver在这里插入图片描述
    2.将pom.xml 文件中的mysql版本号降低至5系列在这里插入图片描述

rerun项目

<think>我们正在解决Sqoop执行时出现的警告:`Loading class 'com.mysql.jdbc.Driver'. This is deprecated. The new driver class is 'com.mysql.cj.jdbc.Driver'`。 根据引用[1][2][3][4],这个警告是因为新版的MySQL JDBC驱动中,`com.mysql.jdbc.Driver`已经被标记为过时,推荐使用新的驱动类`com.mysql.cj.jdbc.Driver`。 同时,引用[4]指出,从JDBC 6.0开始,驱动类更新了,并且在连接URL中必须设置时区,否则会报错。 因此,解决步骤包括: 1. 替换驱动类名为新的类名。 2. 在连接URL中指定时区(如`serverTimezone=Asia/Shanghai`)。 3. 确保使用新版本的MySQL JDBC驱动jar包(如mysql-connector-java-8.0.x.jar)。 具体操作如下: 步骤1:下载并替换MySQL JDBC驱动 - 下载最新版的MySQL JDBC驱动(例如8.0.33版本)到Sqoop的lib目录下,并删除旧版本的驱动(如5.x版本的驱动)。 步骤2:修改Sqoop命令 - 在Sqoop命令中,使用`--driver com.mysql.cj.jdbc.Driver`指定新的驱动类。 - 在连接字符串(`--connect`参数)中添加时区设置,例如:`jdbc:mysql://localhost:3306/dbname?serverTimezone=Asia/Shanghai`。 - 如果涉及中文字符,还需要添加字符编码设置,如:`useUnicode=true&characterEncoding=UTF-8`。 示例命令: ```bash sqoop import \ --driver com.mysql.cj.jdbc.Driver \ --connect "jdbc:mysql://localhost:3306/test?useUnicode=true&characterEncoding=UTF-8&serverTimezone=Asia/Shanghai" \ --username root \ --password 123456 \ --table user ``` 步骤3(可选):配置sqoop-site.xml - 如果希望所有命令都默认使用新的驱动类,可以在`sqoop-site.xml`中配置: ```xml <property> <name>sqoop.jdbc.driver</name> <value>com.mysql.cj.jdbc.Driver</value> </property> ``` 注意:如果升级驱动后出现其他问题,可以回退到旧版本驱动(如5.1.x),但需要注意旧版本驱动可能不支持MySQL 8.0的一些新特性。 通过以上步骤,警告信息将被消除,同时确保Sqoop能够正确连接MySQL数据库。 相关问题: 1. 如何解决Sqoop连接MySQL 8.0时的时区错误? 2. Sqoop导入数据时出现中文乱码该如何处理? 3. 升级MySQL JDBC驱动后Sqoop任务失败如何回滚? 4. 如何验证Sqoop当前使用的JDBC驱动版本?</think>### 解决 Sqoop 中 MySQL JDBC 驱动过时警告 #### 问题原因分析 当 Sqoop 执行时出现警告 `Loading class 'com.mysql.jdbc.Driver'. This is deprecated. The new driver class is`,主要原因是: 1. **驱动类已弃用**:MySQL 从 JDBC 6.0+ 开始弃用 `com.mysql.jdbc.Driver`,新驱动类为 `com.mysql.cj.jdbc.Driver`[^1][^2][^3] 2. **缺少时区配置**:MySQL 8.0+ 要求连接 URL 中必须指定时区参数(如 `serverTimezone`)[^4] 3. **驱动版本不匹配**:Sqoop 仍在使用旧版 MySQL JDBC 驱动 JAR 文件 #### 完整解决方案 ##### 步骤 1:更新驱动类名 在 Sqoop 命令中**显式指定新驱动类**: ```bash sqoop import \ --driver com.mysql.cj.jdbc.Driver \ # ✅ 使用新版驱动类 --connect "jdbc:mysql://localhost:3306/your_db" \ ... ``` ##### 步骤 2:添加时区参数(必须) 在连接 URL 中添加时区配置(根据实际时区选择): ```bash --connect "jdbc:mysql://localhost:3306/your_db?serverTimezone=Asia/Shanghai" # 可选时区值: # - Asia/Shanghai # - UTC # - America/New_York ``` ##### 步骤 3:更新驱动 JAR 文件 ```bash # 下载新版驱动 (推荐 8.0.x) wget https://dev.mysql.com/get/Downloads/Connector-J/mysql-connector-java-8.0.33.tar.gz # 替换 Sqoop 旧驱动 tar -zxvf mysql-connector-java-8.0.33.tar.gz cp mysql-connector-java-8.0.33/mysql-connector-java-8.0.33.jar $SQOOP_HOME/lib/ # 删除旧版驱动 (通常为 5.x 版本) rm $SQOOP_HOME/lib/mysql-connector-java-5*.jar ``` ##### 步骤 4:中文编码处理(可选) 防止中文乱码,添加字符集参数: ```bash --connect "jdbc:mysql://localhost:3306/your_db?serverTimezone=Asia/Shanghai&useUnicode=true&characterEncoding=UTF-8" ``` #### 永久配置方案 在 `$SQOOP_HOME/conf/sqoop-site.xml` 中添加: ```xml <property> <name>sqoop.jdbc.driver</name> <value>com.mysql.cj.jdbc.Driver</value> </property> ``` #### 验证命令 ```bash sqoop eval \ --driver com.mysql.cj.jdbc.Driver \ --connect "jdbc:mysql://localhost:3306/mysql?serverTimezone=UTC" \ --query "SELECT @@version" # 应返回 MySQL 版本号无警告 ``` > **关键点总结** > 1. 驱动类更新:`com.mysql.jdbc.Driver` → `com.mysql.cj.jdbc.Driver` > 2. 时区必填:URL 中必须包含 `serverTimezone` 参数 > 3. 驱动匹配:JAR 文件版本需与 MySQL 服务器版本兼容 > 4. 中文安全:添加 `characterEncoding=UTF-8` 防乱码[^3] 通过以上步骤,可彻底消除警告并确保 Sqoop 与 MySQL 8.0+ 的正常连接[^1][^2][^4]。 --- ### 相关问题 1. **如何解决 Sqoop 连接 MySQL 8.0 时的时区错误?** > 在连接 URL 中添加 `?serverTimezone=时区值`(如 `Asia/Shanghai`),并确保使用 MySQL 8.0+ 的 JDBC 驱动[^4]。 2. **Sqoop 导入数据时出现中文乱码该如何处理?** > 在连接参数中添加 `&useUnicode=true&characterEncoding=UTF-8`,同时检查 Hive/HDFS 的字符集配置是否一致[^3]。 3. **升级 MySQL JDBC 驱动后 Sqoop 任务失败如何回滚?** > 恢复旧版驱动:① 删除新版 JAR 文件 ② 将备份的旧版 `mysql-connector-java-5.x.x.jar` 放回 `$SQOOP_HOME/lib/`。 4. **如何验证 Sqoop 当前使用的 JDBC 驱动版本?** > 执行:`sqoop version | grep "mysql-connector"` 或检查 `$SQOOP_HOME/lib/` 目录下的 JAR 文件名。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

Adam`南帝·梁

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

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

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

打赏作者

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

抵扣说明:

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

余额充值