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

系列目录

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

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

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

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

spring事务详解(五)总结提升编程

1、概念

事务的概念不少,只有对总体有一个把控,才能见微知著。好比一上来直接问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. 七大传播机制概念图以下:

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光看日志就能够清晰知道核心流程)。勉之。

3、应用

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

1.编程式事务

2.申明式事务

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

4、不足

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

相关文章
相关标签/搜索