spring事务没回滚

Posted 临飞

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了spring事务没回滚相关的知识,希望对你有一定的参考价值。

      最近遇见一个问题,用spring管理实务,在service层处理数据,保存数据时出现异常,但没有回滚,检查了一下,发现是因为我用try catch将异常进行捕获了,没有抛出导致的;默认spring事务只在发生未被捕获的 runtimeexcetpion时才回滚。 

处理发法一:捕获异常后,新生成runtimeexcetpion;

  1. try {          
  2.         userDao.save(user);          
  3.         userDao.update(user);         
  4.        } catch (Exception e) {         
  5.         logger.info("异常信息:"+e);          
  6.         throw new RuntimeException();   
  7.           }     

 

 处理方法二:捕获异常后,添加TransactionAspectSupport.currentTransactionStatus().setRollbackOnly()手动回滚

  1. try {          
  2.         userDao.save(user);          
  3.        userDao.update(user);        
  4.     } catch (Exception e) {          
  5.         logger.info("异常信息:"+e);          
  6.         TransactionAspectSupport.currentTransactionStatus().setRollbackOnly();         
  7.     }  

处理方法三:不用try   catch进行捕获;出现异常的方法会被spring管理而进行回滚

         1.       userDao.save(user); 

         2.       userDao.update(user);

 

以上是关于spring事务没回滚的主要内容,如果未能解决你的问题,请参考以下文章

spring中啥样的异常会造成事务回滚?!

利用spring实现多线程 + 事务回滚

四Spring事务回滚

spring配置了事务,抛出异常不回滚

spring全注解事务管理中怎么手动回滚事物

spring自己抛出异常,居然不能回滚