javascript
Spring事务管理-传播行为-隔离级别
事務(wù)是邏輯上的一組操作,這組操作要么全部成功,要么全部失敗。
事務(wù)的特性:ACID
原子性:事務(wù)是一個(gè)不可分割的工作單位,事務(wù)中的操作要么都發(fā)生,要么都不發(fā)生
一致性:事務(wù)前后數(shù)據(jù)的完整性約束保持一致
隔離性:多個(gè)用戶并發(fā)訪問(wèn)數(shù)據(jù)庫(kù)時(shí),一個(gè)用戶的事務(wù)不會(huì)被其他用戶的事務(wù)干擾,數(shù)據(jù)相互隔離
持久性:事務(wù)提交之后對(duì)數(shù)據(jù)的改變是永久性的
?
Spring支持兩種事務(wù)管理:
?
1、編程式事務(wù)管理:自己編寫事務(wù)處理的類,進(jìn)行調(diào)用
?
Spring 對(duì)事物的編程式管理有基于底層 API 的編程式管理和基于 TransactionTemplate 的編程式事務(wù)管理兩種方式。
?
2、聲明式事務(wù)管理(基于AOP思想實(shí)現(xiàn))
?
基于TransactionProxyFactoryBean的方式
?
基于AspectJ的XML的方式
?
基于注解方式(常用)@Transactional
?
Spring編程式事務(wù)管理的三個(gè)主要接口:
PlatformTransactionManager(事務(wù)管理器)
TransactionDefinition(事務(wù)定義信息:傳播行為、隔離級(jí)別、超時(shí)、只讀)
TransactionStatus事務(wù)具體運(yùn)行狀態(tài)
根據(jù)不同的平臺(tái)選擇相應(yīng)的事務(wù)管理器(如JDBC選擇DataSourceManager)
臟讀:讀到其他事務(wù)修改數(shù)據(jù)后未提交的值
不可重復(fù)讀(在于更新和刪除)
幻讀(在于插入)
事務(wù)的傳播行為:解決業(yè)務(wù)層方法之間的相互調(diào)用問(wèn)題
簡(jiǎn)潔秒速:
其中spring七個(gè)事物傳播屬性:
PROPAGATION_REQUIRED -- 支持當(dāng)前事務(wù),如果當(dāng)前沒(méi)有事務(wù),就新建一個(gè)事務(wù)。這是最常見(jiàn)的選擇。
PROPAGATION_SUPPORTS -- 支持當(dāng)前事務(wù),如果當(dāng)前沒(méi)有事務(wù),就以非事務(wù)方式執(zhí)行。
PROPAGATION_MANDATORY -- 支持當(dāng)前事務(wù),如果當(dāng)前沒(méi)有事務(wù),就拋出異常。
PROPAGATION_REQUIRES_NEW -- 新建事務(wù),如果當(dāng)前存在事務(wù),把當(dāng)前事務(wù)掛起。
PROPAGATION_NOT_SUPPORTED -- 以非事務(wù)方式執(zhí)行操作,如果當(dāng)前存在事務(wù),就把當(dāng)前事務(wù)掛起。
PROPAGATION_NEVER -- 以非事務(wù)方式執(zhí)行,如果當(dāng)前存在事務(wù),則拋出異常。
PROPAGATION_NESTED -- 如果當(dāng)前存在事務(wù),則在嵌套事務(wù)內(nèi)執(zhí)行。如果當(dāng)前沒(méi)有事務(wù),
則進(jìn)行與PROPAGATION_REQUIRED類似的操作。?
事務(wù)超時(shí)
為了使應(yīng)用程序很好地運(yùn)行,事務(wù)不能運(yùn)行太長(zhǎng)的時(shí)間。因?yàn)槭聞?wù)可能涉及對(duì)后端數(shù)據(jù)庫(kù)的鎖定,所以長(zhǎng)時(shí)間的事務(wù)會(huì)不必要的占用數(shù)據(jù)庫(kù)資源。事務(wù)超時(shí)就是事務(wù)的一個(gè)定時(shí)器,在特定時(shí)間內(nèi)事務(wù)如果沒(méi)有執(zhí)行完畢,那么就會(huì)自動(dòng)回滾,而不是一直等待其結(jié)束。
?
隔離級(jí)別
?
五個(gè)隔離級(jí)別:
ISOLATION_DEFAULT 這是一個(gè)PlatfromTransactionManager默認(rèn)的隔離級(jí)別,使用數(shù)據(jù)庫(kù)默認(rèn)的事務(wù)隔離級(jí)別.
另外四個(gè)與JDBC的隔離級(jí)別相對(duì)應(yīng);
ISOLATION_READ_UNCOMMITTED 這是事務(wù)最低的隔離級(jí)別,它充許別外一個(gè)事務(wù)可以看到這個(gè)事務(wù)未提交的數(shù)據(jù)。
這種隔離級(jí)別會(huì)產(chǎn)生臟讀,不可重復(fù)讀和幻像讀。
?
ISOLATION_READ_COMMITTED 保證一個(gè)事務(wù)修改的數(shù)據(jù)提交后才能被另外一個(gè)事務(wù)讀取。另外一個(gè)事務(wù)不能讀取
該事務(wù)未提交的數(shù)據(jù)。這種事務(wù)隔離級(jí)別可以避免臟讀出現(xiàn),但是可能會(huì)出現(xiàn)不可重復(fù)讀和幻像讀。
?
ISOLATION_REPEATABLE_READ 這種事務(wù)隔離級(jí)別可以防止臟讀,不可重復(fù)讀。但是可能出現(xiàn)幻像讀。它除了保證
一個(gè)事務(wù)不能讀取另一個(gè)事務(wù)未提交的數(shù)據(jù)外,還保證了避免下面的情況產(chǎn)生(不可重復(fù)讀)。
?
ISOLATION_SERIALIZABLE 這是花費(fèi)最高代價(jià)但是最可靠的事務(wù)隔離級(jí)別。事務(wù)被處理為順序執(zhí)行。除了防止臟讀,
不可重復(fù)讀外,還避免了幻像讀。
關(guān)鍵詞:
1)幻讀:事務(wù)1讀取記錄時(shí)事務(wù)2增加了記錄并提交,事務(wù)1再次讀取時(shí)可以看到事務(wù)2新增的記錄;
2)不可重復(fù)讀取:事務(wù)1讀取記錄時(shí),事務(wù)2更新了記錄并提交,事務(wù)1再次讀取時(shí)可以看到事務(wù)2修改后的記錄;
3)臟讀:事務(wù)1更新了記錄,但沒(méi)有提交,事務(wù)2讀取了更新后的行,然后事務(wù)T1回滾,現(xiàn)在T2讀取無(wú)效。
?
轉(zhuǎn)載于:https://www.cnblogs.com/cn-chy-com/p/10798604.html
總結(jié)
以上是生活随笔為你收集整理的Spring事务管理-传播行为-隔离级别的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 10、K最近邻算法
- 下一篇: JSON.stringify() 格式化