- 背景:
中国移动签到有你活动,每日可签到最多一次
- 问题:
因枷锁服务引起的问题
当两个线程都解锁失败后,事务并没有回滚,因此数据库出现两条签到记录,数据出现了不一致性
3. 解决:
在finally代码块中判断解锁失败后,加入手动回滚事务的代码块
boolean unLockFlag = this.iLockService.unLock(cdsContext, cdsContext.getActCode(), mobile);
logger.info("==============================>>>flip解锁:" + unLockFlag);
if (!unLockFlag) {
//手动事务回滚
TransactionAspectSupport.currentTransactionStatus().setRollbackOnly();
//解锁失败
this.errorInfo(cdsResult, resultMap, ERROR_UNLOCK_FAIL_CODE, ERROR_UNLOCK_FAIL_MSG, IResultCode.CDS_HANDLE_FAILED);
}