原创

Spring双数据源@Transactional事务不回滚问题

  1. 同一个service内方法套用,如方法A->B->C,最外层方法A必须标注为@Transactional

  2. 双数据源下,需要事务的数据源必须标注为 @Primary,否则,必须在@Transactional中指定transactionManager

  3. 默认情况下,Spring会对unchecked异常进行事务回滚;如果是checked异常则不回滚。

    那么什么是checked异常,什么是unchecked异常

    java里面将派生于Error或者RuntimeException(比如空指针,1/0)的异常称为unchecked异常,其他继承自java.lang.Exception得异常统称为Checked Exception,如IOException、TimeoutException等

  4. 没办法的办法:手动回滚

    try {
       insertAll(record);
     }catch (Exception e){
 //        TransactionAspectSupport.currentTransactionStatus().setRollbackOnly();
       throw e;
     }
  1. 已验证,controller中用try catch不影响事务,service中用try catch影响事务,配置@ControllerAdvice不影响事务

参考

spring@Transactional注解事务不回滚不起作用无效的问题处理 - 小奔的早晨 - 博客园

https://www.cnblogs.com/syp172654682/p/9811341.html

正文到此结束