kl个人博客 首页>>java>>记 mysql-connector-java:8.0.28 的 bug 排查,你可能也踩坑了

记 mysql-connector-java:8.0.28 的 bug 排查,你可能也踩坑了

前言

如标题,最终查明问题是因为 mysql-connector-java:8.0.28 的一个 bug 导致的。但是在真相未浮出之前,整个问题可谓扑朔迷离,博主好久没有排查过如此得劲的 bug ,随着一层层的 debug 深入,真相也随之浮出水面。这个问题属于底层 jdbc 驱动的问题,具有普遍性,可能不知不觉中,你的应用也在线上遭受这个 bug 的摧残,所以,请耐心听我讲完这个故事,然后回去检查下你的应用状态,是否也踩坑了。喜欢直接的可以直接拉到文末结语看结果。

结语

先总结下问题表像为 Spring Transactional【事务回滚不生效,回滚前提交的数据不会回滚】,根本原因是 【mysql-connector-java:8.0.28 版本提交的一个改动 bug ,导致在启用 useLocalSessionState=true 的情况下,autoCommit 状态设置有问题】。

然后因为 spring-boot:2.6.3 ~ 2.6.7 ,这五个版本默认的 MySQL 驱动就是 mysql-connector-java:8.0.28 ,而 useLocalSessionState=true 几乎是 Java JDBC DataSource 里的标配,所以这个 bug 估计会影响一大波人。然后因为只是影响回滚操作,所以这个问题会隐藏的很深,不容易察觉,所谓影响深远。


博主这个文章首发在开源中国,因为复制过来的样式太丑了,懒得调整。所以这里只保留【前言】、【结语】了,全文请跳转:https://my.oschina.net/klblog/blog/5542934

kl个人博客