二十 Spring的事務管理及其API
阿新 • • 發佈:2018-11-01
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