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