簡體   English   中英

Spring 事務中 requires_new 和嵌套傳播的區別

[英]Differences between requires_new and nested propagation in Spring transactions

我無法理解PROPAGATION_REQUIRES_NEWPROPAGATION_NESTED傳播策略之間的行為差​​異。 在我看來,在這兩種情況下,當前進程都會回滾,但不會回滾整個事務。 有什么線索嗎?

請參閱此鏈接: PROPAGATION_NESTED 與 PROPAGATION_REQUIRES_NEW? Juergen Hoeller 解釋得很好。 -- Spring Source Forum於2019年2月28日完全離線,但您可以在下面的引用中閱讀文章的相關部分

PROPAGATION_REQUIRES_NEW 為給定范圍啟動一個新的、獨立的“內部”事務。 該事務將完全獨立於外部事務提交或回滾,具有自己的隔離范圍、自己的一組鎖等。外部事務將在內部事務開始時暫停,並在內部事務完成后恢復完全的。 ...

另一方面,PROPAGATION_NESTED 啟動一個“嵌套”事務,它是現有事務的真正子事務。 將會發生的情況是在嵌套事務開始時將采用一個保存點。 Í如果嵌套事務失敗,我們將回滾到該保存點。 嵌套事務是外部事務的一部分,因此只會在外部事務結束時提交。 ...

PROPAGATION_REQUIRES_NEW :對每個受影響的事務范圍使用完全獨立的事務。 在這種情況下,底層物理事務是不同的,因此可以獨立提交或回滾,外部事務不受內部事務回滾狀態的影響。

PROPAGATION_NESTED :使用具有多個可以回滾的保存點的單個物理事務。 這種部分回滾允許內部事務作用域觸發其作用域的回滾,而外部事務能夠繼續物理事務,盡管某些操作已經回滾。 此設置通常映射到 JDBC 保存點,因此僅適用於 JDBC 資源事務。

檢查彈簧文檔

請找出不同之處

1.) Use of NESTED Transaction

如果當前事務存在,則在嵌套事務中執行,其他行為類似於 PROPAGATION_REQUIRED。 Spring 支持嵌套事務

2.) 使用 REQUIRED Transaction 支持當前事務,如果不存在則創建一個新事務。 . 這意味着銀行域,如取款,存款,更新交易

3.) REQUIRES_NEW 事務的使用 創建一個新事務,如果存在則掛起當前事務。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM