事務屬性的種類:傳播行為,隔離級別,唯讀,事務超時
傳播行為:定義了被呼叫方法的事務邊界
propagation_required--支援當前事務,如果當前沒有事務,就新建乙個事務。 (required必須的)
propagation_supports--支援當前事務,如果當前沒有事務,就以非事務方式執行。 (support支援,有就用,沒有就不用)
propagation_mandatory--支援當前事務,如果當前沒有事務,就丟擲異常。 (mandatory強制的,一定要有,沒有就拋異常)
propagation_requires_new--新建事務,如果當前存在事務,把當前事務掛起。 (new必須新建乙個,有的話則掛起)
propagation_not_supported--以非事務方式執行操作,如果當前存在事務,就把當前事務掛起。 (notsupport不支援,有則掛起來)
propagation_never--以非事務方式執行,如果當前存在事務,則丟擲異常。 (never不能有,有則拋異常)
propagation_nested-當前事務存在,則方法應該執行在乙個巢狀事務中,否則和required沒啥區別 (nested巢狀的,有則巢狀)
隔離級別:
簡單來說就是一般會有三種***:髒讀,不可重複讀,幻讀。
在mysql中有4種隔離級別:未提交讀,已提交讀,可重複讀,可序列化。
spring則提供5種隔離級別來對應它們:
isolation_default
使用後端資料庫預設的隔離級別
isolation_read_uncommitted
允許讀取未提交的資料(對應未提交讀),可能導致髒讀、不可重複讀、幻讀
isolation_read_committed
允許在乙個事務中讀取另乙個已經提交的事務中的資料(對應已提交讀)。可以避免髒讀,但是無法避免不可重複讀和幻讀
isolation_repeatable_read
乙個事務不可能更新由另乙個事務修改但尚未提交(回滾)的資料(對應可重複讀)。可以避免髒讀和不可重複讀,但無法避免幻讀
isolation_serializable
這種隔離級別是所有的事務都在乙個執行佇列中,依次順序執行,而不是並行(對應可序列化)。可以避免髒讀、不可重複讀、幻讀。但是這種隔離級別效率很低,因此,除非必須,否則不建議使用。
唯讀:如果在乙個事務中所有關於資料庫的操作都是唯讀的,也就是說,這些操作只讀取資料庫中的資料,而並不更新資料,那麼應將事務設為唯讀模式( read_only_marker ) , 這樣更有利於資料庫進行優化 。
因為唯讀的優化措施是事務啟動後由資料庫實施的,因此,只有將那些具有可能啟動新事務的傳播行為 (propagation_nested 、 propagation_required 、 propagation_required_new) 的方法的事務標記成唯讀才有意義。
事務超時:
如果乙個事務長時間執行,這時為了盡量避免浪費系統資源,應為這個事務設定乙個有效時間,使其等待數秒後自動回滾。與設定「唯讀」屬性一樣,事務有效屬性也需要給那些具有可能啟動新事物的傳播行為的方法的事務標記成唯讀才有意義。
Spring事務管理
spring是ssh中的管理員,負責管理其它框架,協調各個部分的工作。今天一起學習一下spring的事務管理。spring的事務管理分為宣告式跟程式設計式。宣告式就是在spring的配置檔案中進行相關配置 程式設計式就是用註解的方式寫到 裡。下面先說宣告式 spring配置檔案中關於事務配置總是由三...
spring事務管理
一 xml配置事務 二 註解的方式配置事務 bean id txmanaager class org.springframework.orm.hibernate3.hibernatetransactionmanager property name sessionfactory ref session...
spring 事務管理
和資料庫打交道的碼農都知道事務,事務有4大特徵,分別是原子性,一致性,隔離性,永續性。而spring 對事物提供了良好的支援,和api,通過簡單的配置,則可以減低程式設計師重複的操作。1.原子性 原子性指的是乙個事務內的所有操作要麼全部應用到資料庫,要麼取消對資料庫的操作。2.一致性 一致性和原子性...