Spring事務傳播

2021-10-14 21:29:36 字數 1637 閱讀 5295

package org.springframework.transaction;

import org.springframework.lang.nullable;

public

inte***ce

transactiondefinition

事務的傳播面向的是乙個方法在另乙個方法中執行時對事務的處理方式。

事務的傳播等級有7個:支援當前事務,沒有就建立事務,或者非事務方式執行,或者丟擲異常,這是三種。

還有就是掛起當前事務,新建事務或者非事務方式執行,這是兩種。還有一種是非事務方式執行,當前有事務就丟擲異常。

掛起當前事務,新建事務,是用了jtatransactionmanager,開啟新事務前,掛起了前乙個事務,新事務提交或回滾後,又恢復了前乙個事務。

最後一種是支援當前事務,沒有就建立事務,自己回滾時外層不會滾,外層回滾時內層回滾。這是因為自己執行前,設定了安全點,回滾時,回滾到安全點,不影響外層;又在同乙個事務中,所以外層回滾時自己回滾。

事務傳播,研究b方法在a方法中的情況。

@transactional

(propagation = propagation.required)

public

void

methoda()

// 事務屬性為requires_new

@transactional

(propagation = propagation.requires_new)

public

void

methodb()

main()

catch

(runtimeexception ex)

finally

//methodb執行完後,恢復第乙個事務

tm.resume

(ts1)

;dosomethingb()

; ts1.

commit()

;//提交第乙個事務

}catch

(runtimeexception ex)

finally

}

methoda()

@transactional(propagation = propagation.newsted)

methodb()

main()

catch

(runtimeexception ex)

finally

dosomething2()

; con.

commit()

;}catch

(runtimeexception ex)

finally

}

b方法回滾時會到達儲存點,即b方法在a方法中的前面。

package org.springframework.transaction.annotation;

public

enum propagation

public

intvalue()

}

參考:

spring事務傳播

採用程式設計式事務 1 getcurrentsession 與opensession 的區別?採用getcurrentsession 建立的session會繫結到當前執行緒中,而採用opensession 建立的session則不會 採用getcurrentsession 建立的session在co...

Spring事務傳播

required 預設 如果當前存在事務,就加入該事務,如果不存在,則建立乙個新的事務 supports 如果呼叫者有事務,則加入該事務,如果沒有,則以非事務方式執行 mandatory 如果存在事務,則加入該事務,如果不存在事務,則拋異常 requires new 重新建立乙個新的事務,如果當前存...

spring事務以及事務傳播

事務必須服從acid原則。acid指的是原子性 atomicity 一致性 consistency 隔離性 isolation spring的事務管理的幾種實現方式 1.程式設計式 首先基於pojo的話一般就是用這種,在 中呼叫begintransaction commit rollback 等事務...