事务

发布时间 2023-08-30 14:03:27作者: lwx_R

1.事务传播机制

2.事务异常处理

spring事务只对RuntimeException奏效
通过aop来获取异常,如果手动捕获则不会回滚

  • 正常回滚
@PostMapping("/test")
@Transactional
public void test() {
    transPlatformAccessMapper.insertTest();
    int i = 1/0;
}
  • 不会回滚
@PostMapping("/test")
@Transactional
public void test() {
    try{
        transPlatformAccessMapper.insertTest();
        int i = 1/0;
    }catch (Exception e){
        e.printStackTrace();
    }

}

2.1 手动回滚

  • 回滚点
@PostMapping("/test")
    @Transactional
    public void test() {
        //设置回滚点,只回滚以下异常
        Object savePoint = TransactionAspectSupport.currentTransactionStatus().createSavepoint();
        try{
            transPlatformAccessMapper.insertTest();
            int i = 1/0;
        }catch (Exception e){
            e.printStackTrace();
            //手工回滚到回滚点
            TransactionAspectSupport.currentTransactionStatus().rollbackToSavepoint(savePoint);
        }
    }
  • 全部回滚
@PostMapping("/test")
@Transactional
public void test() {
    try{
        transPlatformAccessMapper.insertTest();
        int i = 1/0;
    }catch (Exception e){
        e.printStackTrace();
        // 全部回滚
        TransactionAspectSupport.currentTransactionStatus().setRollbackOnly();
    }
}