当前使用版本(必填,否则不予处理)
3.3.2
该问题是如何引起的?(确定最新版也有问题再提!!!)
多线程的并发的场景. 集成ServiceImpl使用saveBatch接口,生成的id重复了,偶现.
重现步骤(如果有就写完整)
报错信息
org.springframework.dao.DuplicateKeyException: com.ai94.scrm.core.del.mapper.ClientTagRelationMapper.insert (batch index #1) failed. Cause: java.sql.BatchUpdateException: Duplicate entry '1352562529590693890' for key 'PRIMARY' ; Duplicate entry '1352562529590693890' for key 'PRIMARY'; nested exception is java.sql.BatchUpdateException: Duplicate entry '1352562529590693890' for key 'PRIMARY' at org.springframework.jdbc.support.SQLErrorCodeSQLExceptionTranslator.doTranslate(SQLErrorCodeSQLExceptionTranslator.java:247) at org.springframework.jdbc.support.AbstractFallbackSQLExceptionTranslator.translate(AbstractFallbackSQLExceptionTranslator.java:72) at org.mybatis.spring.MyBatisExceptionTranslator.translateExceptionIfPossible(MyBatisExceptionTranslator.java:88) at com.baomidou.mybatisplus.extension.service.impl.ServiceImpl.executeBatch(ServiceImpl.java:232) at com.baomidou.mybatisplus.extension.service.impl.ServiceImpl.executeBatch(ServiceImpl.java:252) at com.baomidou.mybatisplus.extension.service.impl.ServiceImpl.saveBatch(ServiceImpl.java:127) at com.baomidou.mybatisplus.extension.service.IService.saveBatch(IService.java:69)
Comment From: VitZhou
mac地址是在多实例环境下才会出现的问题啊,我的是单机,批量多线程插入导致的,概率还不低
Comment From: qmdx
同一台机器部署多个实例,建议考虑设置为不同的 dataCenterId
public DefaultIdentifierGenerator(long workerId, long dataCenterId) {
this.sequence = new Sequence(workerId, dataCenterId);
}