參考博客:
另外注意手動回滾事務需要
(1)在業務層方法上添加注解 @Transactional
(2)在需要回滾的地方添加代碼:
TransactionAspectSupport.currentTransactionStatus().setRollbackOnly();
示例:
@Transactional public ResultBuilder userUpdate(JSONObject jsonObject) { try { UserInfo userInfo = new UserInfo(); int count = userInfoMapper.updateUserInfo(userInfo); if (count != 1){ logger.error("[userUpdate] updateUserInfo is fail"); return new ResultBuilder(StatusCode.FAIL); } //修改密碼的情況下進行Redis中token清除 if (!StringUtils.isEmpty(password)){ try { redisTemplate.delete(Constants.TOKEN_REDIS_KEY_PRE + userId); }catch (Exception ex){ logger.error("[userUpdate] redis delete key exception", ex); //手動回滾 TransactionAspectSupport.currentTransactionStatus().setRollbackOnly(); throw ex; } } return new ResultBuilder(StatusCode.SUCCESS); }catch (Exception e){ logger.error("[userUpdate] error", e); return new ResultBuilder(StatusCode.FAIL); } }