Java try catch finaly中回滚事务

@Transactional(rollbackFor=RuntimeException.class)
public AjaxResult checakIn(@RequestBody XgcyPurchaseOrder xgcyPurchaseOrder)
{
    String errorMessage = null;
    try{
      lock.lock();
      throw new RuntimeException("入库数量为0,无法入库");
    } 
    catch (Exception e) {
      e.printStackTrace();
      errorMessage = e.getMessage();
      //事务回滚
      TransactionAspectSupport.currentTransactionStatus().setRollbackOnly();
    }
    finally {
       // 必须在finally中释放
      lock.unlock();
      if(errorMessage == null) {
        return success();
      }
      else {
        return warn(errorMessage);
      }
    }
}

在C#中,try-catch-finally是用于异常处理的重要机制,它能帮助开发者更优雅地处理程序运行时出现的问题。 ### 语法 ```csharp try { // 有可能出现错误的代码写在这里 } catch { // 出错后报出异常 } finally { // 不管什么情况都会执行,包括try-catch里面用了return,可以理解为只要执行了try或者catch,就一定会执行finally } ``` ### 各部分作用 - **try**:一个`try`块标识了一个将被激活的特定的异常的代码块,后跟一个或多个`catch`块。在`try`块中,放置可能会抛出异常的代码[^3]。 - **catch**:程序通过异常处理程序捕获异常,`catch`关键字表示异常的捕获。当`try`块中的代码抛出异常时,程序控制权会转移到与之匹配的`catch`块中执行相应的异常处理代码[^3]。 - **finally**:`finally`块用于执行给定的语句,不管异常是否被抛出都会执行。例如,如果打开一个文件,不管是否出现异常文件都要被关闭。即使在`try`块内使用`return`语句返回,在返回前,`finally`块也总是会执行,以便有机会在异常处理最后做一些清理工作,如关闭数据库连接、文件连接等[^3][^4]。 ### 使用注意事项 如果没有`catch`语句块,那么`finally`块就是必须的。如果不希望在这里处理异常,而当异常发生时提交到上层处理,但在这个地方无论发生异常都要执行一些操作,就可以使用`try-finally`,典型的应用就是进行数据库操作,示例如下: ```csharp try { DataConnection.Open(); DataCommand.ExecuteReader(); ... return; } finally { DataConnection.Close(); } ``` ### 示例代码 ```csharp using System; class MyException { public static void Main() { int x = 0; int div = 0; try { div = 100 / x; Console.WriteLine("此行未执行"); } catch (DivideByZeroException) { Console.WriteLine("发生异常"); } finally { Console.WriteLine("Finally块"); } Console.WriteLine($"结果为 {div}"); } } ``` 在上述示例中,由于`try`块中进行了除以零的操作,会抛出`DivideByZeroException`异常,程序控制权转移到`catch`块中输出“发生异常”,然后执行`finally`块输出“Finally块”,最后继续执行后续代码输出结果[^5]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值