| 注册
请输入搜索内容

热门搜索

Java Linux MySQL PHP JavaScript Hibernate jQuery Nginx
jopen
8年前发布

Spring 事务回滚机制

异常回滚示例

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

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();语句,手动回滚,这样上层就无需去处理异常



来自: http://my.oschina.net/manmao/blog/593886

 本文由用户 jopen 自行上传分享,仅供网友学习交流。所有权归原作者,若您的权利被侵害,请联系管理员。
 转载本站原创文章,请注明出处,并保留原始链接、图片水印。
 本站是一个以用户分享为主的开源技术平台,欢迎各类分享!
 本文地址:https://www.open-open.com/lib/view/open1452342592948.html
Spring JEE框架