spring 事務處理

2021-10-03 23:17:44 字數 2092 閱讀 2825

3. 宣告式事務管理實現

4. 事務傳播特性

5. spring事務隔離級別

事務是乙個業務,是乙個不可分割的邏輯工作單元,具備acid特性,實際工作中可借助spring進行事務管理。

spring的事務模組是通過aop來實現的。spring提供了兩種事務管理方式, 程式設計式事務和宣告式事務。程式設計式事務指的是通過編碼方式實現事務;宣告式事務基於 aop,將具體業務邏輯與事務處理解耦。宣告式事務管理使業務**邏輯不受汙染, 因此在實際使用中宣告式事務用的比較多。

事務中的所有操作、所有sql語句是乙個整體,要麼全都執行成功,要麼全都執行失敗。

事務前後的業務資料之和是保持不變的。例如存錢操作,存之前和存之後的總錢數應該是一致的。

事務與事務是相互隔離的,在隔離級別足夠高的情況下,事務和事務之間是完全隔離開來的。乙個事務是看不到另外乙個事物正在進行中的操作。要麼看到另乙個事物開始之前的狀態, 要麼看到事務結束之後的狀態。

永續性是指在事物提交後, 對資料的修改將會是永久的。

spring中宣告式事務處理有兩種方式,一種是在配置檔案中做相關的事務規則宣告,另一種是基於@transactional 註解的方式。

筆者喜歡用註解方式方式實現:

在類或方法上使用@transactional註解告訴spring框架要在這個類或者這個方法執行時要新增事務控制。當 @transactional 放在類上時,說明所有該類的公共方法都配置相同的事務屬性資訊。當 @transactional 放在類上也放在方法上時,應用程式會以方法級別的事務屬性資訊來管理事務。

@transactional註解的屬性:

● timeout 事務的超時時間,預設值為-1,表示沒有超時顯示。如果配置了具體時間,則超過該時間限制但事務還沒有完成,則自動回滾事務。

● read-only指定事務是否為唯讀事務,預設值為 false;為了忽略那些不需要事務的方法,比如讀取資料,可以設定 read-only 為 true。

● rollback-for 用於指定能夠觸發事務回滾的異常型別,如果有多個異常型別需要指定,各型別之間可以通過逗號分隔。

● no-rollback- for 丟擲 no-rollback-for 指定的異常型別,不回滾事務。

● isolation事務的隔離度,預設值採用 default。

事務傳播(propagation)特性指不同業務(service)物件中的事務方法之間相互呼叫時,事務的傳播方式。

● propagation.required 如果沒有事務建立新事務,如果當前有事務參與當前事務。

● propagation.requires_new 必須是新事務, 如果有當前事務, 掛起當前事務並且開啟新事務。

● propagation.supports 支援當前事務,如果當前沒有事務,就以非事務方式執行。

● propagation.not_supported 以非事務方式執行操作,如果當前存在事務,就把當前事務掛起。

● propagation.never 以非事務方式執行,如果當前存在事務,則丟擲異常。

● propagation.mandatory 使用當前的事務,如果當前沒有事務,就丟擲異常。

● propagation.nested 如果當前存在事務,則在巢狀事務內執行。如果當前沒有事務,則執行propagation.required類似的操作。

● isolation_default 這是乙個platfromtransactionmanager預設的隔離級別,使用資料庫預設的事務隔離級別。

● isolation_read_uncommitted(讀未提交資料)安全級別最低, 可能出現任何事務併發問題(比如髒讀、不可以重複讀、幻讀等),效能最好,但是不建議用。

● isolation_read_committed(讀已提交資料)防止髒讀,沒有處理不可重複讀,也沒有處理幻讀;

效能比repeatable read好,oracle資料庫預設的隔離級別。

● isolation_repeatable_read (可重複讀) 防止髒讀和不可重複讀,不能處理幻讀問題;

效能比serializable好。mysql資料庫預設的隔離級別。

● isolation_serializable(序列化)不會出現任何併發問題,因為它是對同一資料的訪問是序列的,非併發訪問的,效能最差。

spring事務處理

一 spring 事務處理 1 事務的處理也交給了 spring 來管理,要在 檔案中上配置事務管理類 實施事務管理的 bean class org.springframwork.orm.hibernate3.hibernatetransactionmanager 它是通過 sessionfacto...

spring事務處理

xml 實施事務管理的bean bean id transactionmanager class org.springframwork.orm.hibernate3.hibernatetransactionmanager property name sessionfactory refbean se...

spring事務處理

一.spring事務分為宣告式事務和程式設計式事務 二 程式設計式事務可以作用在 庫,示例 autowired private org.springframework.jdbc.datasource.datasourcetransactionmanager transactionmanager pu...