簡體   English   中英

事務暫停如何在Spring中運行?

[英]How does transaction suspension work in Spring?

我的問題與基本相同,但我對答案不滿意所以我正在寫這個問題。

在Spring Framework手冊中,聲明對於PROPAGATION_REQUIRES_NEW,當前事務將被暫停。 這是如何實際實現的? 我知道大多數數據庫不支持嵌套事務,並且只能在一個連接中運行一個事務。 這意味着您不能只是“不使用”原始事務並啟動新事務 - 在啟動新事務之前,您必須提交或回滾原始事務。

例:

START TRANSACTION
SELECT ...
UPDATE ...
-- Now we run method with PROPAGATION_REQUIRES_NEW
-- How do we "suspend" transaction so we can start new one?
START TRANSACTION
UPDATE ...
COMMIT
-- We returned from the method, result was commited
-- Now we'd like to "unsuspend" the original transaction so it can be commited/rollbacked, but how?

或者這可能是使用另一個連接(會話對象)實現的? 這樣我們就可以停止使用原始連接並創建一個可以開始新事務的新連接?

我在這里遺漏了一些顯而易見的事情,沒有人願意解釋它(至少在Spring文檔,Spring in Action,Spring持久化Hibernate中)。

非常感謝!

暫停事務的目的是將線程的當前事務更改為新事務。 這不符合嵌套事務的語義,因為新事務和掛起事務完全相互獨立。 沒有連接級API來支持掛起事務,因此必須使用不同的連接來完成。 如果您在Spring中使用JTA,則由JTA事務管理器完成。 如果您正在使用DataSourceTransactionManager,您可以查看代碼並查看它將作為“暫停資源”保存當前連接,並從新事務的數據源中獲取新連接。

暫無
暫無

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

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