解决Java高并发添加数据主键冲突异常
2019-02-18 本文已影响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);
}
}