1. 程式人生 > >二十 Spring的事務管理及其API

二十 Spring的事務管理及其API

action spring事務 data 常用 mtr bsp nsa UNC 回顧

Spring提供兩種事務方式:編程式和聲明式(重點)

事務的回顧:

  • 事務:邏輯上的一組操作,組成這組事務的各個單元,要麽全部成功,要麽全部失敗

事務的特性:

  • 原子性:事務不可分割
  • 一致性:事務執行前後數據完整性保持一致
  • 隔離性:一個事務執行不應該受到其他事務的幹擾
  • 持久性:一旦事務結束,數據就持久化到數據庫

如果不考慮隔離性引發安全問題:

讀問題:

  • 臟讀:一個事務讀到另一個事務未提交的數據
  • 不可重復讀:一個事務讀到另一個事務已經提交的update數據,導致另一個事務中多次查詢結果不一致
  • 虛讀、幻讀:一個事務讀到另一個事務已經提交的insert數據,導致另一個事務中多次查詢結果不一致

解決讀問題:

設置事務的隔離級別:開發常用二三。非常安全,效率低。

  • Read uncommitted: 未提交讀,任何讀問題解決不了
  • Read Committeed : 已提交讀, 解決臟讀,但是不可重復讀和虛讀有可能發生。Oracle
  • Repeatable read : 重復讀,解決臟讀和不可重復讀,但是虛讀有可能發生。mysql
  • Serializable: 解決所有讀問題

寫問題:

  • 丟失更新

事務管理的API:

PlatformTransactionManager:平臺事務管理器

  • DataSourceTransactionManager:底層是JDBC管理事務
  • HibernateTransactionManager:底層是Hibernate管理事務

TransactionDefinition:事務定義信息

  • 事務定義:用於定義事務的相關信息,隔離級別,超時信息、傳播行為、是否只讀。
  • TransactionStates:事務的狀態,用於記錄在事務管理過程中事務的狀態的對象。

TransactionStates:事務的狀態

  • 事務狀態:用於記錄在事務管理過程中,事務的狀態的對象。

事務管理的API的關系:

Spring進行事務管理的時候,首先是平臺事務管理器根據事務定義信息進行事務的管理。

在事務管理過程中,產生各種狀態,將這些狀態信息記錄到事務狀態的對象中。

Spring事務的傳播行為:主要解決業務層方法相互調用的問題

主要理解紅色部分,一般用默認

技術分享圖片

Spring的事務管理:

二十 Spring的事務管理及其API