事務管理是企業級應用程式開發中必不可少的技術,用來確保資料的完整性和一致性
。事務就是一系列的動作,它們被當做乙個單獨的工作單元,這些動作要麼全部完成,要麼全部不起作用。
1:原子性:事務是乙個原子操作,用一系列動作組成,事務的原子性確保動作要麼全部完成要麼完全不起作用。 2
:一致性:一旦所有事務動作完成,事務就被提交,資料和資源就處於一種滿足業務規則的一致性狀態中。 3
:隔離性:可能有許多事務會同時處理相同的資料,因此每個事務都應該與其他事務隔離開來,防止資料破壞。 4
:永續性:一旦事務完成,無論發生什麼系統錯誤,它的結果都不應該受到影響,通常情況下,事務的結果被寫到持久化儲存器中。
當事務方法被另乙個事務方法呼叫時,必須指定事務應該如何傳播。
事務方法之間存在父子關係。
例如:方法可能繼續在現有的事務中執行,也可能開啟乙個新事務,並在自己的事務中執行。
下面是spring中的
7中類傳播行為:
1:required:
如果有事務,當前的方法就在這個事務中執行,否則就開啟乙個新的事務,並且在自己的事務內執行。
2:requires_new:
不管父方法是否存在事務
都會新建事務。
3:supports
:父方法存在spring事務 使用當前spring事務 沒有spring事務 就使用
jdbc
事務(自動提交)。
4:not_supported:
不管父類中是否有spring事務,都不會使用spring事務,會使用
jdbc
事務(自動提交或回滾)。
5:mandatory :
必須在spring事務環境下執行,父方法沒有事務,丟擲異常。
6:never
:父方法不能存在spring事務 如果有會丟擲異常 7:
nested:
如果有事務在執行,當前的方法就應該在這個事務的巢狀事務內執行,否則就啟動乙個新的事務,並在它自己的事務內執行。
可以像下面這樣在
元素中設定傳播事務屬性。
事務的隔離級別要得到底層資料庫引擎的支援,而不是應用程式或者框架的支援。
oracle支援的兩種事務隔離級別:
read_commited , serializable
mysql支援四種事務隔離級別
也可以在
元素中指定隔離級別,通過
isolation=」」來設定。
由於事務可以在行和表上獲得鎖, 因此長事務會占用資源
, 並對整體效能產生影響.
如果乙個事務只讀取資料但不做修改, 資料庫引擎可以對這個事務進行優化.
超時事務屬性: 事務在強制回滾之前可以保持多久
. 這樣可以防止長期執行的事務占用資源.
唯讀事務屬性: 表示這個事務只讀取資料但不更新資料
, 這樣可以幫助資料庫引擎優化事務
mysql預設
10s,
oracle
永不超時。
回滾事務是在事務遇到執行時異常時發生,非執行時異常不會發生。
rollback-for=」異常」 指定會自動回滾的非執行時異常
no-rollback-for=」」 指定某些執行時異常不回滾。
spring事務傳播特性
1.propagation required 如果存在乙個事務 則支援當前事務。如果沒有事務則開啟。2.propagation supports 如果存在乙個事務 則支援當前事務。如果沒有事務則非事務執行。3.propagation mandatory 如果已經存在乙個事務 則支援當前事務。如果沒有...
spring事務傳播特性
spring事務傳播特性 事務傳播行為就是多個事務方法相互呼叫時,事務如何在這些方法間傳播。spring支援7種事務傳播行為 spring 預設的事務傳播行為是 propagation required,它適合於絕大多數的情況。假設 servivex methodx 都工作在事務環境下 即都被 sp...
Spring事務傳播特性
傳播性值描述 propagation required 0當前有事務就用當前的,沒有就用新的 propagation supports 1事務可有可無,不是必須的 propagation mandatory 2當前一定要有事務,不然就拋異常 propagation requires new 3無論是...