Spring事務管理

事務

事務:是指邏輯上的一組操作,這組操作要麼全部成功,要麼全部失敗。
事務的特性:

  • 原子性:原子性是指事務是一個不可 分割的工作單位,事務中的操作要麼都發生,要麼都不發生。
  • 一致性:一致性是指事務前後數據的完整性必須保持一致 
  • 隔離型:是指多個用戶併發訪問數據庫時,一個用戶的事務不能被其他用戶的事務所幹擾,多個併發事務直接數據要相互隔離
  • 持久性:是指一個事務一旦被提交,它對數據庫中數據的改變是永久性的,即使數據庫發生故障也不應該對其有任何影響  

Spring支持兩種方式事務管理:
   1.編程式事務管理      

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

   2.使用XML配置聲明式事務

  • 開發中推薦使用(代碼入侵性最小)
  • Spring的聲明式事務是通過AOP實現
  • 基於TransactionProxyFactoryBean的方式.(很少使用)

       需要爲每個進行事務管理的類,配置一個TransactionProxyFactoryBean進行增強.

  • 基於AspectJ的XML方式.(經常使用)

       一旦配置好之後,類上不需要添加任何東西

  • 基於註解方式.(經常使用)

       配置簡單,需要在業務層上添加一個@Transactional的註解.

事務的API接口介紹

  • Platform TransactionManager(事務管理器)

       Spring爲不同的持久化框架提供不同的Platform TransactionManager接口實現

       

  • TransactionDefinition(事務定義信息(隔離、傳播、超時、只讀))

       TransactionDefinition事務定義信息:定義隔離信息
       髒讀:一個事務讀取了另一個事務改寫但還未提交的數據,如果這些數據被回滾,則讀到的數據是無效的
       不可重複讀:在同一個事務中,多次讀取同一數據返回的結果有所不同
       幻讀:一個事務讀取了幾行記錄後,另一個事務插入一些記錄,幻讀就發生了。再後來的查詢中,第一個事務就會發現有些         原來沒有的記錄
       事務的隔離級別:

       

       MySQL默認採用REPEATABLE _READ隔離級別
       Oracle默認採用READ_COMMITTED隔離級

       TransactionDefinition事務定義信息:定義事務的傳播行爲

       

       
       重點記標紅的,標紅的是比較常用的。

  • TransactionStatus(事務具體運行狀態)

       用來記錄事務的狀態 ,該接口定義了一組方法,用來獲取或判斷事務的相應狀態信息。

平臺事務管理器(PlatformTransactionManager)會根據TransactionDefinition中定義的事務信息(包括隔離級別、傳播行爲)來進行事務的管理,在管理的過程中事務可能產生了保存點或事務是新的事務等情況,那麼這些信息都會記錄在TransactionStatus的對象中。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章