javascript
Spring的事务管理1
事務的回顧:
- 事務:邏輯上的一組操作,組成這組事務的各個單元,要么全部成功,要么全部失敗
事務的特性:ACID
- 原子性(Atomicity):事務不可分割
- 一致性(Consistency):事務執行前后數據完整性保持一致
- 隔離性(Isolation):一個事務執行不應該受到其他事務的干擾
- 持久性(Durability):一旦事務結束,數據就持久化到數據庫
如果不考慮隔離性引發安全問題:
讀問題:
- ??? 臟讀:一個事務讀到另一個事務未提交的數據
- ??? 不可重復讀:一個事務讀到另一個事務已經提交的update數據,導致另一個事務中多次查詢結果不一致
- ??? 虛讀、幻讀:一個事務讀到另一個事務已經提交的insert數據,導致另一個事務中多次查詢結果不一致
解決讀問題:
設置事務的隔離級別:開發常用二三。非常安全,效率低。
- ??????? Read uncommitted: 未提交讀,任何讀問題解決不了
- ??????? Read Committeed? : 已提交讀, 解決臟讀,但是不可重復讀和虛讀有可能發生。Oracle
- ????? ? Repeatable read?? : 重復讀,解決臟讀和不可重復讀,但是虛讀有可能發生。mysql
- ???? ?? Serializable:????? 解決所有讀問題
寫問題:
- ????? 丟失更新
事務管理的API:
PlatformTransactionManager:平臺事務管理器
平臺事務管理器:接口,是Spring管理事務的真正對象
- DataSourceTransactionManager:底層是JDBC管理事務
- HibernateTransactionManager:底層是Hibernate管理事務
TransactionDefinition:事務定義信息
- 事務定義:用于定義事務的相關信息,隔離級別,超時信息、傳播行為、是否只讀。
- TransactionStates:事務的狀態,用于記錄在事務管理過程中事務的狀態的對象。
TransactionStates:事務的狀態
- 事務狀態:用于記錄在事務管理過程中,事務的狀態的對象。
事務管理的API的關系:
Spring進行事務管理的時候,首先是平臺事務管理器根據事務定義信息進行事務的管理。
在事務管理過程中,產生各種狀態,將這些狀態信息記錄到事務狀態的對象中。
Spring事務的傳播行為:主要解決事務在業務層方法相互調用的問題
Spring中提供了七種事務的傳播行為:
保證多個操作在同一個事務中
? PROPAGATION_REQUIRED???? :默認值,如果A中有事務,使用A中的事務,如果A沒有,創建一個新的事務,將操作包含進來
? PROPAGATION_SUPPORTS???? :支持事務,如果A中有事務,使用A中的事務。如果A沒有事務,不使用事務。
? PROPAGATION_MANDATORY?? :如果A中有事務,使用A中的事務。如果A沒有事務,拋出異常。
?
???? 保證多個操作不在同一個事務中
? PROPAGATION_REQUIRES_NEW ?? :如果A中有事務,將A的事務掛起(暫停),創建新事務,只包含自身操作。如果A中沒有事務,創建一個新事務,包含自身操作。
? PROPAGATION_NOT_SUPPORTED :如果A中有事務,將A的事務掛起。不使用事務管理。
? PROPAGATION_NEVER??????? ?? :如果A中有事務,報異常。
?
????? 嵌套式事務
? PROPAGATION_NESTED?????? :嵌套事務,如果A中有事務,按照A的事務執行,執行完成后,設置一個保存點,執行B中的操作,如果沒有異常,執行通過,如果有異常,可以選擇回滾到最初始位置,也可以回滾到保存點。
?
?
轉載于:https://www.cnblogs.com/zengcongcong/p/10406539.html
《新程序員》:云原生和全面數字化實踐50位技術專家共同創作,文字、視頻、音頻交互閱讀總結
以上是生活随笔為你收集整理的Spring的事务管理1的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: uwsgi配置理解
- 下一篇: vue中textarea标签自适应高度