spring事务不会进行回滚的情况
2016-09-21 17:30
134 查看
if(userSave){ try { userDao.save(user); userCapabilityQuotaDao.save(capabilityQuota); } catch (Exception e) { logger.info("能力开通接口,开户异常,异常信息:"+e); } }
类似上面这样的方法不会回滚 (一个方法出错,另一个方法不会回滚)
下面的方法回滚(一个方法出错,另一个方法会回滚):
if(userSave){ try { userDao.save(user); userCapabilityQuotaDao.save(capabilityQuota); } catch (Exception e) { logger.info("能力开通接口,开户异常,异常信息:"+e); throw new RuntimeException(); } }
if(userSave){ try { userDao.save(user); userCapabilityQuotaDao.save(capabilityQuota); } catch (Exception e) { logger.info("能力开通接口,开户异常,异常信息:"+e); TransactionAspectSupport.currentTransactionStatus().setRollbackOnly(); } }
为什么不会滚呢??是对Spring的事务机制就不明白。!!
默认spring事务只在发生未被捕获的 runtimeexcetpion时才回滚。
spring aop 异常捕获原理:被拦截的方法需显式抛出异常,并不能经任何处理,这样aop代理才能捕获到方法的异常,才能进行回滚,默认情况下aop只捕获runtimeexception的异常,但可以通过
配置来捕获特定的异常并回滚
换句话说在service的方法中不使用try catch 或者在catch中最后加上throw new runtimeexcetpion(),这样程序异常时才能被aop捕获进而回滚
相关文章推荐
- Spring事务管理只对出现运行期异常进行回滚
- Spring事务管理默认只对Unchecked Exception进行回滚
- spring事务 异常不会回滚
- Spring事务异常回滚,捕获异常不抛出就不会回滚
- Spring事务异常回滚,捕获异常不抛出就不会回滚
- Spring的事务管理对何种异常进行回滚
- Spring 使用注解方式进行事务管理--注解回滚机制
- mybatis整合spring、springmvc时业务层无法进行事务回滚问题解决
- Spring事务异常回滚,捕获异常不抛出就不会回滚
- spring结合junit进行单元测试(二)——测试后进行事务回滚
- Spring事务管理只对出现运行期异常进行回滚
- Spring事务异常回滚,捕获异常不抛出就不会回滚
- Spring事务管理只对出现运行期异常进行回滚
- Spring事务异常回滚,捕获异常不抛出就不会回滚
- Spring的事务管理对何种异常进行回滚
- Spring事务管理只对出现运行期异常进行回滚
- Spring的事务管理对何种异常进行回滚
- Spring 事务在什么情况下,会进行sql回滚
- Spring事务异常回滚,捕获异常不抛出就不会回滚
- spring 声明式事务管理在真实的Service和单元测试时的回滚情况,需要注意的问题,jpa为例子