事務管理器是 platformtransactionmanager 介面物件。其主要用於完成事務的提交、回滾,及獲取事務的狀態資訊。
void commit(transactionstatus status):事務的提交
transactionstatus gettransaction(transactiondefinition definition):獲取事務的狀態
void rollback(transcationstatus status):事務的回滾
platformtransactionmanager 介面有兩個常用的實現類:
datasourcetransactionmanager:使用 jdbc 或 mybatis 進行持久化資料時使用。
hibernatetransactionmanager:使用 hibernate 進行持久化資料時使用。
spring 的回滾方式
spring 事務的預設回滾方式是:發生執行時異常回滾
default:採用 db 預設的事務隔離級別。
mysql 預設為 repeatable_read;oracle 預設為:read_committed;
eg:b修改資料後不提交,a在運算元據就變了,b可以提交前捲回
eg:只有b提交了,a才能變(解決髒讀)。a不用提交 直接查,不可重複讀(update)、虛讀(insert)的更新的資料都可以直接查到(不可重複讀和幻讀)
eg:只有b提交了,a自己也提交了才能看到update資料(避免了不可重複讀和脹讀)。a不用提交直接查虛讀(insert)的更新的資料可能查到(有可能存在幻讀)
eg:只有b提交了,a自己也提交了才能看到update和insert資料
級別越高,效能越低,資料越安全
事務隔離級別主要解決併發問題:
所謂事務傳播行為是指,處於不同事務中的方法在相互呼叫時,執行期間事務的維護情況。如,a 事務中的方法 a() 呼叫 b 事務中的方法 b(),在呼叫執行期間事務的維護情況,就稱為事務傳播行為。事務傳播行為是加在方法上的。
eg:a.a()必須要在事務內執行,如果b.b()存在事務,可以直接加到b.b()中,如果b.b()不存在事務,a.a()自己建立事務
eg:b.b()有事務,a.a()就跟著走,b.b()無事務,a.a()照樣自己走
eg:b.b()有事務,a.a()在裡面執行。b.b()無事務,拋異常
eg:b.b()有事務,a.a()不理,自己建立乙個事務執行
eg:a.a()不支援事務,如果b.b()沒事務,可以執行,如果b.b()有事務,把b.b()掛起。
eg:a.a()不支援事務,如果b.b()沒事務,可以執行,如果b.b()有事務,拋異常
eg:a.a()必須要在事務內執行,如果b.b()存在事務,a.a()自己建立事務巢狀在b.b()事務中,如果b.b()不存在事務,a.a()自己建立事務
Spring的事務管理簡介
比如去atm機取1000塊錢,大體有兩個步驟 首先輸入密碼金額,銀行卡扣掉1000元錢 然後atm出1000元錢。這兩個步驟必須是要麼都執行要麼都不執行。如果銀行卡扣除了1000塊但是atm出錢失敗的話,將會損失1000元 如果銀行卡扣錢失敗但是atm卻出了1000塊,那麼銀行將損失1000元。所以...
Spring事務管理
spring是ssh中的管理員,負責管理其它框架,協調各個部分的工作。今天一起學習一下spring的事務管理。spring的事務管理分為宣告式跟程式設計式。宣告式就是在spring的配置檔案中進行相關配置 程式設計式就是用註解的方式寫到 裡。下面先說宣告式 spring配置檔案中關於事務配置總是由三...
spring事務管理
一 xml配置事務 二 註解的方式配置事務 bean id txmanaager class org.springframework.orm.hibernate3.hibernatetransactionmanager property name sessionfactory ref session...