Spring事務總結

定義

邏輯上的一組操作,要么全做,要么全不做。

四大特性(簡稱ACID):

  • 原子性(Atomicity)
    事務是不可分割工作單元
  • 一致性(Consistency)
    事務前后數據的完整性必須保持一致
  • 隔離性(Isolation)
    多個用戶并發訪問時,多個并發事務之間是數據相互隔離的
  • 持久性(Durability)
    一個事務一旦被提交,它對數據庫中數據的改變就是永久性的

常用API

3個主要接口

  • PlatformTransactionManager
    事務管理器
  • TransactionDefinition
    事務定義信息
  • TransactionStatus
    事務具體運行狀態

事務隔離級別
如果不考慮隔離性,會引發安全問題:
1.臟讀:一個事務讀取了另一個事務改寫但還未提交的數據,如果這些數據被回滾,則讀到的數據是無效的。
2.不可重復讀:在同一事務中,多次讀取同一數據返回的結果有所不同。
3.幻讀(虛讀):一個事務讀取幾行記錄后,另一個事務插入一些記錄,幻讀就發生了。在后來的查詢中,第一個事務就會發現有些原來沒有的記錄。

事務隔離級別

補充:
(1)Mysql 默認采用的 REPEATABLE_READ隔離級別
(2)Oracle 默認采用的 READ_COMMITTED隔離級別

事務傳播行為

事務傳播行為

補充:
第一類共同點:如果 A 方法中有事務,則調用 B 方法時就用該事務,即:A和B方法在同一個事務中。PROPAGATION_REQUIRED:如果 A 方法中沒有事務,則調用 B 方法時就創建一個新的事務,即:A和B方法在同一個事務中。PROPAGATION_SUPPORTS:如果 A 方法中沒有事務,則調用 B 方法時就不使用該事務。PROPAGATION_MANDATORY:如果 A 方法中沒有事務,則調用 B 方法時就拋出異常。
第二類共同點:A方法和B方法沒有在同一個事務里面。PROPAGATION_REQUIRES_NEW:如果 A 方法中有事務,則掛起并新建一個事務給 B 方法。PROPAGATION_NOT_SUPPORTED:如果 A 方法中有事務,則掛起。PROPAGATION_NEVER:如果 A 方法中有事務,則報異常。
第三類:如果 A 方法有的事務執行完,設置一個保存點,如果 B 方法中事務執行失敗,可以滾回保存點或初始狀態。

重點的三種:PROPAGATION_REQUIRED, PROPAGATION_REQUIRES_NEW, PROPAGATION_NESTED。

編程式事務

實際中很少使用
通過TransactionTemplate手動管理事務

聲明式事務

開發過程中推薦使用
通過使用AOP實現
在配置文件XML中
使用方式

  • 注解
  • AspectJ
  • 基于TransactionProxyFactoryBean方式
最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容

  • 很多人喜歡這篇文章,特此同步過來 由淺入深談論spring事務 前言 這篇其實也要歸納到《常識》系列中,但這重點又...
    碼農戲碼閱讀 4,775評論 2 59
  • Spring事務機制主要包括聲明式事務和編程式事務,此處側重講解聲明式事務,編程式事務在實際開發中得不到廣泛使用,...
    EnigmaXXX閱讀 675評論 0 0
  • 事務有四個特性:ACID 原子性(Atomicity):事務是一個原子操作,由一系列動作組成。事務的原子性確保動作...
    jiangmo閱讀 1,253評論 0 7
  • 一、事務的基本原理 Spring事務的本質其實就是數據庫對事務的支持,沒有數據庫的事務支持,spring是無法提供...
    芭蕾武閱讀 1,702評論 3 12
  • 1,從本篇文章/音頻/視頻中我學到的最重要的概念: Two part 1~8.9~13 1.when,where,...
    17數414王俊平閱讀 335評論 1 1