zoukankan      html  css  js  c++  java
  • 阶段3 2.Spring_10.Spring中事务控制_3 作业-基于注解的AOP实现事务控制及问题分析_下

    此时没有异常

    测试我们的方法


    执行报错

    注解在实际的测试过程中,实际的执行顺序是有问题的。会先调用最终通知。然后再调用后置通知
    最终通知已经关闭了连接。再调用后置通知肯定报错。



    getThreadConnection发现当前线程上已经没有连接了

    没有链接了会去再拿一个链接。再绑定到线程上。虽然已经绑定上去了。由于前置通知已经执行完了。这个connection自动提交已经是true了
    再提交就不行了。


    这里我们把自动提交设置为false测试下

    通过打断点的方式。再下面三个地方加断点



    运行测试,使用dubug的方式

    首先断点同流在这里拿链接

    由于没有就会链接池里面拿一个,并且设置为false。然后绑定线程

    执行完了然后开启事物


    执行到转账的方法之后。就会又来到这个地方

    这个时候我们的线程上有连接。就往下走不拿链接


    点击左下角绿色按钮放过这个ddao中的方法

    点了好几次绿色的。跳转到了 这个release方法。也就是最终通知先走了

    再次点击绿色的

    这个时候才来到commit。但是由于release已经走过了。

    再往下走已经没有任何意义

    就算它提交了 数据库也不会改变。因为刚才执行操作的connection已经先关闭了。新的connection虽然提交没有异常。但是里面也没有任何的执行操作

    画图










    执行了最终通知后。线程解绑

    最终解决方法就是环绕通知

    把通知的注释都去掉。然后定义环绕通知的方法

    这里的异常捕获要用Throwable



    环保通知的注解

    测试


    转账成功


    放开异常


    转账失败。事务被控制住了



     

  • 相关阅读:
    MongoDB简单使用
    mongodb安装部署
    分布式通信-序列化
    分布式通信协议
    分布式概念
    springboot-事件
    spring-事件
    spring-@Component/@ComponentScan注解
    springboot-Date日期时间问题
    enginx:基于openresty,一个前后端统一,生态共享的webstack实现
  • 原文地址:https://www.cnblogs.com/wangjunwei/p/11363252.html
Copyright © 2011-2022 走看看