1. 程式人生 > >Spring -事務管理

Spring -事務管理

比較 代碼量 數據庫操作 manager 而在 異常類 transacti cti 管理

Java事務導引

事務:正確執行一系列操作(或動作),使得數據庫從一種狀態轉移成另一種狀態,保證操作全部成功,或者全部失敗

事務原則:服從ISO/IEC指定的ACID原則

ISO/IEC:14443 識別卡 -- 非接觸式集成電路卡

原子性(Atomicity)、一致性(Consistency)、隔離性(Isolation)、持久性(Durability)

DataSource

技術分享圖片

Java事務:在Java編寫的程序或者系統中,實現ACID的操作

實現範圍:

通過JDBC相應方法間接實現對數據庫的增刪改查,把事務轉移到Java代碼中控制,確保事務要麽全部執行成功,要麽撤銷不執行

總結:Java事務機制和原理就是確保數據庫操作的ACID特性

Java事務類型:

JDBC事務:Connection對象控制,包括手動模式和自動模式---------局限在一個數據庫連接,但是使用簡單

JTA(Java Transaction API)事務:與實現無關,與協議無關的API------------功能強大,可跨越數據庫或DAO,使用復雜

容器事務:應用服務器提供,且大多基於JAT完成(通常基於JNDI,API復雜)-----------J2EE應用服務器提供的事務管理,局限於EJB

Spring事務核心接口

PlatformTransactionManager接口

技術分享圖片

技術分享圖片

Spring事務屬性

是否是新事務(isNewTransaction)
是否有savepoint(診斷,NESTED):hasSavepoint
是否完成(isCompleted)

技術分享圖片

事務屬性範圍

技術分享圖片

事務屬性定義

技術分享圖片

事務讀取類型

臟讀

不可重復讀

幻讀

事務隔離級別(IsolationLevel)

技術分享圖片

spring事務傳播行為(PropagationBehavior)

技術分享圖片

技術分享圖片

事務是否只讀(isReadOnly)

Oracle的”readOnly”沒有作用,不影響增刪改查

MySQL的”readOnly”為true,只能查,增刪改拋出異常

事務超時(Timeout)
事務回滾

默認情況下,事務遇到運行期異常才會回滾,而在遇到檢查型異常不回滾

自定義:

1、 聲明事務在遇到特定的檢查型異常時像遇到運行時異常那樣回滾

2、 聲明事務在遇到特定的異常不回滾,即使是運行時異常

事務接口

通過事務管理器獲得TransactionAtatus實例

控制事務在回滾或者提交的時候需要應用對應的事務狀態

Spring事務接口

編程式事務管理

事務管理器(PlatformTransactionManager)

1、 類似應用JTA UserTransaction API方式,異常處理更簡潔

2、 核心類:spring事務管理的三個接口類以及JDBC template類

技術分享圖片

模板事務(TransactionTemplate)

JDBC Template類

編程事務步驟:

1、 需要有效的數據源,具體數據源根據實際情況創建

2、 創建編程事務管理對象

定義TransactionTemplate

技術分享圖片

使用TransactionTemplate

有返回值

技術分享圖片

沒有返回值

技術分享圖片

如果需要處理異常

技術分享圖片

3、 業務邏輯:基於JDBC template完成業務處理

聲明式事務管理(AOP)

XML方式配置

1、 添加schema

技術分享圖片

2、 定義事務管理器

技術分享圖片

3、 定義事務Advice

技術分享圖片

<tx:method/>

Name:匹配的函數名稱、支持*匹配

Propagation:事務傳播行為

Isolation:事務隔離級別

Timeout:超時

Read-only:是否只讀事務

Rollback-for:觸發回滾的異常,逗號分隔

No-rollback-for:不觸發回滾的異常,逗號分隔

4、 定義pointcut

技術分享圖片

註意:註入事務的類,還需要註入DataSource的屬性

註解方式配置

1、 添加schema

2、 定義事務管理器

技術分享圖片

3、@Transactional

value:使用的TransactionManager

propagation:事務傳播行為

isolation:事務隔離級別

timeout:超時

readOnly:是否只讀事務

RollbackFor:觸發回滾的異常類對象數組

RollbackForClassName:觸發回滾的異常類名稱數組

noRollbackFor:不觸發回滾的異常類對象數組

noRollbackForClassName:不觸發回滾的異常類名稱數組

技術分享圖片

配置類型:

5種:獨立代理;共享代理;攔截器;(這三種2.0版本之後不推薦使用)

Tx攔截器;全註釋

使用範圍

編程式事務在代碼量比較小的時候使用,聲明式事務在事務操作量多時候常常使用

Spring -事務管理