SpringBoot中事务回滚

注解:@Transactional(rollbackFor = Exception.class)

介绍:

当Transaction内发生 [Unchecked Exception] 异常时, 会自动回滚 Rollback
当 发生 [ Checked Exception ] 异常时,不会做自动回滚处理 Rollback

  • Checked Exception [ Checked ]
    {
    表示无效,不是程序中可以预测的。
    }
  • Unchecked Exception [ Unchecked ]
    {
    表示错误,程序的逻辑错误。
    }

使用方法 :

  • 方法一 :
    {
    @Transactional(rollbackFor = Exception.class)
    public void rollBack()
    {
        // 程序运行中 出现异常时 自动回滚
        // 被回滚方法 function()
        begin...
        function()...
        end...
    }
    
    }
  • 方法二:
    {
    @Transactional(rollbackFor = Exception.class)
    public void rollBack()
    {
        // 当try/catch存在时,需要手工回滚异常
        // 被回滚方法: function1() , function2()
        begin...
        function1()...
        try
        {
       	 function2()...
        }
        catch(Exception e)
        {
       	 e.printStackTrace();
       	 // 手动回滚异常
       	 TransactionAspectSupport.currentTransactionStatus()
       	 .setRollbackOnly();
       	 function3()...
        }
        end...
    }
    
    }
  • 方法三:
    {
    @Transactional(rollbackFor = Exception.class)
    public void rollBack()
    {
        // 当try/catch存在时 需要进行手动回滚
        // 被回滚方法 function2() , function3()
        begin...
        function1()...
        // 设置回滚点,只回滚以下异常 
        Object rollBackPoint = TransactionAspectSupport
       					.currentTransactionStatus().createSavepoint();
        try
        {
       	 function2()...
       	 service.function3()...
       	 // 存在线程方法时 线程方法不回滚
       	 function4()
       	 {
       	 Thrand.execute()...
       	 }...
        }
        catch(Exception e)
        {
       	 e.printStackTrace();
       	 // 手动回滚异常,回滚到rollBackPoint
       	 TransactionAspectSupport.currentTransactionStatus()
       	 .rollbackToSavepoint(rollBackPoint);
        }
        end...
        
    }
    
    }

你可能感兴趣的:(spring,boot,java,spring,后端)