此时没有异常

测试我们的方法

执行报错

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


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

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

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

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



运行测试,使用dubug的方式

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

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

执行完了然后开启事物

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

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

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

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

再次点击绿色的

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

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

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

画图


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

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

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

这里的异常捕获要用Throwable



环保通知的注解

测试


转账成功

放开异常


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

阶段3 2.Spring_10.Spring中事务控制_3 作业-基于注解的AOP实现事务控制及问题分析_下的更多相关文章

  1. 阶段3 2.Spring_10.Spring中事务控制_2 作业-基于注解的AOP实现事务控制及问题分析_上

    创建maven的新项目 先复制坐标的依赖. 再把代码复制进来 先改造ioc的部分 复制上面一行代码.到下面 改成context 这里也是复制的上面两行代码.到下面改成context关键字 配置扫描的包 ...

  2. 阶段3 2.Spring_10.Spring中事务控制_6 spring基于XML的声明式事务控制-配置步骤

    环境搭建 新建工程 把对应的依赖复制过来 src下内容复制 配置spring中的声明事物 找到bean.xml开始配置 配置事物管理器 里面需要注入DataSource 2-配置事物通知 需要先导入事 ...

  3. 阶段3 2.Spring_10.Spring中事务控制_5 spring事务控制的代码准备

    创建一个工程,只搭建环境不做配置.等配置的时候把这个项目相关的代码再复制到新项目里面 jar包的打包方式 导入包 事务控制也是基于AOP的.所以这里导入aspectjweaver 复制jdbcTemp ...

  4. 阶段3 2.Spring_10.Spring中事务控制_4 spring中事务控制的一组API

    分析aop的 xml 的代码.更直观一些 事务提交和回滚就是我们重复的代码 spring业余事务管理器,我们拿过来直接用就可以 提交和回滚的后面直接调用释放.所以释放资源之类就是多余的 在绑定连接到线 ...

  5. 阶段3 2.Spring_10.Spring中事务控制_8 spring基于纯注解的声明式事务控制

    新建项目 把之前项目src下的内容全部复制过来 pom.xml内复制过来 开始配置 新建一个config的包,然后再新建配置文件类SpringConfiguration @Configuration这 ...

  6. 阶段3 2.Spring_10.Spring中事务控制_9 spring编程式事务控制1-了解

    编程式的事物控制,使用的情况非常少,主要作为了解 新建项目 首先导入包坐标 复制代码 这里默认值配置了Service.dao和连接池其他的内容都没有配置 也就说现在是没有事物支持的.运行测试文件 有错 ...

  7. 阶段3 2.Spring_10.Spring中事务控制_10spring编程式事务控制2-了解

    在业务层声明 transactionTemplate 并且声称一个set方法等着spring来注入 在需要事物控制的地方执行 execute.但是这个execute需要一个参数 需要的参数是Trans ...

  8. 阶段3 2.Spring_10.Spring中事务控制_7 spring基于注解的声明式事务控制

    创建新项目 复制上一个pom.xml的内容.依赖和打包的方式 再复制src的代码过来 bean.xml.多导入context的声明 Service的实现类增加注解 dao的set方法删掉 通过Auto ...

  9. 阶段3 2.Spring_10.Spring中事务控制_1 基于XML的AOP实现事务控制

    新建项目 首先把依赖复制进来 aop必须引入.aspectjweaver 复制src下的所有内容 复制到我们的新项目里面 factory文件夹删掉 删除后测试类必然就报错 配置文件 beanFacto ...

随机推荐

  1. Windows 10安装Python 2.7和MySQL-python

    1. 安装Python Download Python 2. 安装MySQL-python pip install wheel (应该是可选) pip install mysqlclient==1.3 ...

  2. 从subversion开始(svn安装配置全过程(+全套安装文件与配置文件))…..

    从subversion开始(svn安装配置全过程(+全套安装文件与配置文件))-.. 博客分类: 工具使用 SVNsubversion配置管理Apache应用服务器  </div> 花了一 ...

  3. [易学易懂系列|rustlang语言|零基础|快速入门|(19)|多线程]

    [易学易懂系列|rustlang语言|零基础|快速入门|(19)|多线程] 实用知识 多线程 我们今天来讲讲Rust中的多线程. 我直接来看看代码: use std::thread; use std: ...

  4. ios json数据null的处理

    此处我把json数据中的null转换成了@"",防止出现null程序崩掉,可以把下边宏代码复制到pch中,就可以在整个程序中引用了 #define DSStringValue(va ...

  5. java web 域对象

    四大域对象 pagecontext  表示的是当前页面的域对象Request表示的是请求域中的对象session  表示的是一次会话中的对象application表示的是在一次tc启动到一次关闭的时候 ...

  6. nginx防止跳转到内网解决

    proxy_redirect http://test.abc.com:9080/ /;

  7. IDEA 配置热更新

  8. codevs 1231 最优布线问题 x(find函数要从娃娃抓起系列)

                         题目描述 Description 学校需要将n台计算机连接起来,不同的2台计算机之间的连接费用可能是不同的.为了节省费用,我们考虑采用间接数据传输结束,就是一 ...

  9. 小程序开发获取token值

    // 登录 wx.login({ success: res => { // 发送 res.code 到后台换取 openId, sessionKey, unionId // console.lo ...

  10. week5 作业

    week5 作业 1.描述GPT是什么,应该怎么使用? 描述GPT之前要简单了解MBR分区,MBR(Main Boot Record)叫做主引导记录,其位于磁盘的最前端,由一段代码组成,共占用512个 ...