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