系列目录

spring事务详解(一)初探事务

spring事务详解(二)简单样例

spring事务详解(三)源码详解

spring事务详解(四)测试验证

spring事务详解(五)总结提高

一、概念

事务的概念很多,只有对整体有一个把控,才能见微知著。比如一上来直接问REQUIRED,你一定很懵,但了解了大致关系后,就很清晰:Spring事务定义了六大属性-》其中一个属性是传播机制-》REQUIRED是其中一个,默认的传播机制。梳理出来三张图,如下:

1.1 框架概览

对于数据库事务,国际性认可的标准是ACID,即原子性、一致性、隔离性、持久性。Spring作为一个支持数据库持久化的框架,定义了六大属性来实现这四大特性。属性分别是:事务名称、隔离级别(4种)、超时时间、是否只读、传播机制(7种)、回滚机制。用户使用时定义其中的一种或几种,再结合Spring对底层数据库的驱动,即可实现ACID良好的数据库操作了。持久化层Spring提供了对Spring -Mybatis的很好的支持,可以轻松对接JDBC事务如下图:

1.2 重点属性

1. 四大隔离级别对应的可能出现的问题如下图:

Read Uncommitted < Read Committed < Repeatable Read < Serializable. 从左往右:一致性越来越强,性能越来越低。

官方建议:

Repeatable Read(一致性3星,性能2星)> Read Committed(一致性2星,性能3星) > Read Uncommitted(一致性1星,性能4星) > Serializable(一致性4星,性能1星)。

我的建议:

高并发场景使用Read Committed,低并发场景使用Repeatable Read。其它两个没用过(Read Uncommitted一致性太低了;Serializable sql序列化,数据库会成为瓶颈)。

2. 七大传播机制概念图如下:

二、源码风格

这里我们主要看Juergen Hoeller的源码风格,发现他很好的遵循了Spring的一贯风格:

1.预留方法给customer自己定义扩充,Spring一贯喜欢预留各种后门...

2.利用各种设计模式:

1)template模板模式:构造事务模板,编程式事务源码

2)代理模式:生成增强代理类,声明式事务源码

3. Spring-AOP MethodInterceptor方法拦截器:申明式事务中使用TransactionInterceptor事务拦截器,该类实现了MethodInterceptor接口,继承自Interceptor接口,最终在业务方法invoke()前后进行增强。

4. 面向接口编程,高度抽象:PlatformTransactionManager接口定义getTransaction、commit、rollback。AbstractPlatformTransactionManager抽象类实现通用的获取事务、提交事务、回滚事务。DataSourceTransactionManager继承抽象类,并实现特性接口。

当然看过spring transaction包,除了Spring的一贯风格外,最大的体会是注释丰富,日志丰富(尤其是debug,甚至不需要debug光看日志就可以清晰知道核心流程)。勉之。

三、应用

本系列针对Spring+Mybatis+Mysql,讲解了2种典型的事务的实现方案(数据库事务采用DataSourceTransactionManager来管理事务,支持JDBC驱动,通过Connection和数据库进行交互。):

1.编程式事务

2.申明式事务

并测试了4种隔离级别和7种传播机制。相信通过实测,大家对spring 事务的使用有一定的掌握。

四、不足

本系列只讲解了单数据库的事务,后续会尝试分析分布式事务的实测。

spring事务详解(五)总结提高的更多相关文章

  1. spring事务详解(四)测试验证

    系列目录 spring事务详解(一)初探事务 spring事务详解(二)简单样例 spring事务详解(三)源码详解 spring事务详解(四)测试验证 spring事务详解(五)总结提高 一.引子 ...

  2. spring事务详解(二)简单样例

    系列目录 spring事务详解(一)初探事务 spring事务详解(二)简单样例 spring事务详解(三)源码详解 spring事务详解(四)测试验证 spring事务详解(五)总结提高 一.引子 ...

  3. spring事务详解(三)源码详解

    系列目录 spring事务详解(一)初探事务 spring事务详解(二)简单样例 spring事务详解(三)源码详解 spring事务详解(四)测试验证 spring事务详解(五)总结提高 一.引子 ...

  4. spring事务详解(一)初探事务

    系列目录 spring事务详解(一)初探事务 spring事务详解(二)简单样例 spring事务详解(三)源码详解 spring事务详解(四)测试验证 spring事务详解(五)总结提高 引子 很多 ...

  5. Spring、Spring事务详解;使用XML配置事务

    @Transactional可以设置以下参数: @Transactional(readOnly=false) // 指定事务是否只读的 true/false @Transactional(rollba ...

  6. spring事务详解

    详见:http://blog.yemou.net/article/query/info/tytfjhfascvhzxcyt122 Spring事务机制主要包括声明式事务和编程式事务,此处侧重讲解声明式 ...

  7. 【转】Spring事务详解

    1.事务的基本原理 Spring事务的本质其实就是数据库对事务的支持,使用JDBC的事务管理机制,就是利用java.sql.Connection对象完成对事务的提交,那在没有Spring帮我们管理事务 ...

  8. spring事务详解(转载+高亮)

    spring提供的事务管理可以分为两类:编程式的和声明式的.编程式的,比较灵活,但是代码量大,存在重复的代码比较多:声明式的比编程式的更灵活.编程式主要使用transactionTemplate.省略 ...

  9. JAVA框架之Spring【Spring事务详解】

    spring提供的事务管理可以分为两类:编程式的和声明式的.编程式的,比较灵活,但是代码量大,存在重复的代码比较多:声明式的比编程式的更灵活.编程式主要使用transactionTemplate.省略 ...

随机推荐

  1. shell练习题5

    需求如下: 用shell实现,把一个文件文档中只有一个数字的行给打印出来.(以/password文件为例,自行修改) 参考解答如下 方法1 #!/bin/bash file_name=passwd n ...

  2. c++中,如果访问数组越界,程序可能会意外终止(像死循环)

    #include<iostream> using namespace std; ];// int main(){ vis[]=;//访问越界 ; } 程序错误表现:

  3. zookeeper 启动 zookeeper_server.pid: Permission denied

    在启动zookeeper的时候 报错 没有权限 以为是 zookeeper 没有权限 然后 chmod -R 777 zookeeper/ 之后还是不行. 后来 才发现 原来是我 /tmp/zooke ...

  4. L343 中译英

    爱显摆的人遇事总喜欢标新立异.Showoffs never miss an opportunity to draw attention to themselves by some outrageous ...

  5. 搭建NTP服务集群、高可用

    1.原理 Keepalived 的作用是检测后端服务器的状态,如果有一台服务器死机,或工作出现故障,Keepalived 将检测到,并将有故障的服务器从系统中剔除.当服务器工作正常后 Keepaliv ...

  6. RF新手常见问题总结

    RF新手常见问题总结--(基础篇) 1. 经常有人问这个元素找不到,一般先排除这两个地方,再自己找找A:是否等待了足够的时间让元素加载 (增加sleep xx, wait Until xxx)B:  ...

  7. ajax成功返回结果字符串,对比不成功的解决办法

    这是很久之前遇到的问题了,今天不小心又遇到了,总结了一下以前处理的办法. 废话不说,上代码: $.ajax({ url:"exit.do", data:{account:accou ...

  8. nginx 带? rewrite 规则

    由于需要重定向 url ,nginx需要rewrite .参考文献 http://huangqiqing123.iteye.com/blog/2083434 需求:将http://10.106.1.3 ...

  9. JavaScript作用域[[scope]]

    [[scope]] : 隐式的属性 每个JavaScript函数都是一个对象,对象中有些属性可以访问,而有些属性是不可以访问的,这些属性仅供JavaScript引擎存取, [[scope]]就是其中一 ...

  10. iis7 绑定多个ssl证书

    默认情况下iis上只能绑定一个ssl证书,如果多的话 会只认一个. 停止IIS 运行[ CMD]  ,  输入 [iisreset /STOP] 第一步:修改配置文件. 然后打开:C:/Windows ...