解决Java高并发添加数据主键冲突异常
作者:
何何与呵呵呵 | 来源:发表于
2019-02-18 17:59 被阅读0次
1.回调补偿
try {
if(seq == null) {
seq = new CardSeqEntity();
seq.setCardType(cardNo.toString());
seq.setCardSeq(0);
seq.setCreateTime(new Date());
cardSeqDao.insertSelective(seq);
}else {
seq.setCardSeq(seq.getCardSeq()+1);
cardSeqDao.updateByPrimaryKeySelective(seq);
}
} catch (Exception e) {
if(isExceptionCall) {
//异常只允许回调一次
log.error("生成卡号发生异常", e);
throw new BusinessException(ErrorCodeEnum.ORDER_GENERATOR_CARD_FAIL);
}else {
//第一次购买两个并发时,可能引发同时添加数据主键冲突异常,引发这种异常的回调处理
generatorCardNo(typeAlsa, typeBn, areaCode, oilBn, true);
}
}
2.先建立序列池,然后从序列池(oracle的sequence)获取id作为主键,然后插入.即先申请id,然后将该id作为记录主键再插入。
本文标题:解决Java高并发添加数据主键冲突异常
本文链接:https://www.haomeiwen.com/subject/thrzeqtx.html
网友评论