您的位置:首页 > 编程语言 > Java开发

Spring 事务回滚机制

2017-02-08 18:04 337 查看
异常回滚示例

1.捕获异常,不抛出,事务不能回滚!!!

 

if(userSave){     


  try{    


    userDao.save(user);     


    userCapabilityQuotaDao.save(capabilityQuota);    


  }catch(Exceptione){     


    logger.info("能力开通接口,开户异常,异常信息:"+e);    


  }    


}


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

 

if(userSave){    


  try{     


    userDao.save(user);     


    userCapabilityQuotaDao.save(capabilityQuota);    


   }catch(Exceptione){    


    logger.info("能力开通接口,开户异常,异常信息:"+e);     


    thrownewRuntimeException();    


  }     


}


 3.捕获异常,手动回滚

 

if(userSave){     


  try{     


    userDao.save(user);     


    userCapabilityQuotaDao.save(capabilityQuota);     


 }catch(Exceptione){     


    logger.info("能力开通接口,开户异常,异常信息:"+e);     


    TransactionAspectSupport.currentTransactionStatus().setRollbackOnly();    


 }    


}


 异常事务回滚

 

解决方案:




方案1.




例如service层处理事务,那么service中的方法中不做异常捕获,或者在catch语句中最后增加thrownewRuntimeException()语句,


以便让aop捕获异常再去回滚,并且在service上层(webservice客户端,view层action)要继续捕获这个异常并处理




 方案2.


  


在service层方法的catch语句中增加:TransactionAspectSupport.currentTransactionStatus().setRollbackOnly();语句,手动回滚,


这样上层就无需去处理异常


内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: