目录
另外一种解决办法是升级最新的版本3.5.2进行自定义ID主键算法
前言:
mybatis 的IDWork.getId 其实在集群里面(这里面是同一个网段,且链接同一个nginx服务器,且同时连接同一个数据库)会产生id重复问题,那么如何才能解决?
问题场景描述
前阵子真实的场景是这样的:
主要是线上部署俩台服务器,此时此刻产生的俩台服务器上的Mybatis-plus会生成同样的id, 因为会这样的几率,每一次发生排查都很麻烦。93机器debug日志显示已经插入数据成功;94这台机器显示主键冲突。
问题范围分析
首先分析的是id生成怎么会无缘故的居然会重复,都是新对象进行insert数据库,且是俩台服务器,以为是数据的原因,然后咨询了DBA,看了MYSQL的官网,主键设置自增的不会出现主键冲突的情况,那就只会插入前,赋值出现了同样的主键ID
问题范围定位之后就需要进行源码分析,进行进一步确认,通过Mybatis-plus的主键赋值操作,跟踪到IDwork的getID怎么算出来的。
最新版本的生产id的依赖。机器代码主要是5位数长度。2的5次方=32;下面是目前的源码
protected long getDatacente