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、不足

本系列只講解了單數據庫的事務,後續會嘗試分析分佈式事務的實測。

相關文章
相關標籤/搜索