首页 > 学院 > 开发设计 > 正文

Spring 事务回滚机制

2019-11-10 18:06:36
字体:
来源:转载
供稿:网友
摘要: SPRing事物回滚

异常回滚示例

捕获异常,不抛出,事物不能回滚!!!

if(userSave){              try {                 userDao.save(user);                  userCapabilityQuotaDao.save(capabilityQuota);              } catch (Exception e) {                  logger.info("能力开通接口,开户异常,异常信息:"+e);              }          }

  2.捕获异常,抛出运行时异常,回滚。当一个方法出错,另一个方法必然回滚

if(userSave){              try {                  userDao.save(user);                  userCapabilityQuotaDao.save(capabilityQuota);                } catch (Exception e) {                 logger.info("能力开通接口,开户异常,异常信息:"+e);                  throw new RuntimeException();              }          }

 3.捕获异常,手动回滚

if(userSave){              try {                  userDao.save(user);                  userCapabilityQuotaDao.save(capabilityQuota);              } catch (Exception e) {                  logger.info("能力开通接口,开户异常,异常信息:"+e);                  TransactionaspectSupport.currentTransactionStatus().setRollbackOnly();             }          }

 异常事务回滚解决方案: 

 方案1.

       例如service层处理事务,那么service中的方法中不做异常捕获,或者在catch语句中最后增加throw new RuntimeException()语句,以便让aop捕获异常再去回滚,并且在service上层(webservice客户端,view层action)要继续捕获这个异常并处理

  方案2.

       在service层方法的catch语句中增加:TransactionAspectSupport.currentTransactionStatus().setRollbackOnly();语句,手动回滚,这样上层就无需去处理异常

来源: https://my.oschina.net/manmao/blog/593886
发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表