MySQL connector  Java  最近的一些变更

MySQL connector Java 最近的一些变更

前段时间看sharidng-sphere项目,里面引用了MySQL的Java连接库MySQL-connector-java,用的是5.1.42,但是由于我个人的测试库是MySQL 8.0,用5.1.42版本的jdbc连接的时候,遇到一些兼容性问题(密码算法,会话变量等),于是就想要用MySQL-connector版本的最新版本8.0.13代替下,没想到却打开了一个潘多拉的盒子,事后我追踪了一下MySQL JDBC对MySQL 8.x的支持变更,记录在此作为备忘.

MySQL Connector java的版本

首先说一下MySQL的JDBC库的版本,目前主流使用的,是5.1.x系列版本,这个版本从2015年出现到现在,一直有在被维护(期间有过一个6.x版本,但并没有继续维护),而8.x是新出的版本,2018年4月份才第一个GA版本,5.1.x与8.x系列是目前在并行维护的两个JDBC版本.

5.1.x的变化

连接到8.x,尤其是升级模式的,推荐是更新到5.1.x的最新版本 query_cache_size会话变量在8.x已经废弃,但5.1.43之前的版本中,jdbc还在继续查这个变量,导致jdbc连接数据库会失败. tx_isolation 与 tx_read_only 变量已经变成 transaction_isolation 与 transaction_read_only ,5.1.44开始兼容 TLS(SSL连接)的版本,在之前的JDBC实现仅兼容到1.1版本,但8.0.4要求的版本是1.2版本,在5.1.46版本进行了兼容 5.1.46开始,支持caching_sha2_password的密码认证,这个是8.0的默认密码策略 5.1.47开始,utf8的jdbc配置默认映射为utf8mb4(之前的版本要求设置character_set_server=utf8mb4才会进行这个映射).

8.x的变化

8.x的设计基础是Java 8版本,而目前的主流Java开发版本和平台还是1.7,而java的最新版本目前是11,就我个人的尝试来看,经常会遇到某个老库的包兼容性有问题.甚至包括maven的编译组件.

细化到MySQL JDBC 8.x的变更,也是如此.我挑拣出来一些我认为重大的变更记录在此,预防踩坑.

连接基础类名,java.sql.Driver的路径,从com.mysql.jdbc.Driver 变化到 com.mysql.cj.jdbc.Driver. ;数据源java.sql.DataSource的基础类名,从com.mysql.jdbc.jdbc2.optional.MysqlDataSource变化为com.mysql.cj.jdbc.MysqlDataSource

这俩配置的变更,最麻烦的问题在于,很多代码里面,这种都是直接作为字符串写在代码中,而非单独的配置项目,不像jdbc连接串可以直接替换配置文件修改.

实际上几乎所有的JDBC接口实现的具体类路径都变了,如果是对MySQL JDBC实现重度依赖的框架,估计会有不少麻烦.

虽然8.x的JDBC是目前的推荐使用版本,但就目前的变更来看,估计升级会是一个漫长的道路,

sharding-sphere的变更

以我在sharidng-sphere的修改兼容来看,主要是以下一些地方:

  1. 首先是jdbc驱动路径,sharidng-sphere是写在代码里面的,需要做成单独的配置项目.
  2. 测试case的兼容处理. 这部分相对麻烦些,因为测试的时候,很多地方使用了绝对路径引用,用反射可以搞定,纯粹是工作量问题,但是遇到个问题,分布式框架atomikos的测试case还是有些问题,忽略掉的话,其他case都是可以成功的,具体原因还需要再看,

转载于:https://my.oschina.net/llzx373/blog/3001126

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值