簡體   English   中英

Spring 事務:從帶有 requires 的方法調用的帶有 requires_new 的方法

[英]Spring transactions: Method with requires_new called from a method with requires

我想了解在嵌套事務與調用和被調用方法具有不同隔離級別的情況下,何時發生確切的提交以及何時發生確切的回滾,

例如,我有兩個 spring 服務,我從 service1 的 method1 調用 service2 的 method2。

Method1 具有 REQUIRED 事務范圍,Method2 具有 REQUIRES_NEW 事務范圍,如下面的程序所示。

Service1 {

 @Transactional(propagation = Propagation.REQUIRED)
method1()
{
    for(int i=0; i<10; i++){
        service2.method2();
    }

    // Some more code which takes some time to process
}

}


Service2 {
 @Transactional(propagation = Propagation.REQUIRES_NEW)
 method2()
 {
    //Save some information to DB
    // Save an object using JPA
 }
}

現在我的問題是,據我所知,REQUIRES_NEW 將啟動一個新事務,但是它會在現有的 method2 上立即提交還是會等到 method1 完成然后提交?

我感興趣的是在什么時間點提交發生並且 DB 中的行鎖被釋放,這在方法 2 中持久化。

注意:這里我把兩種方法都放在了不同的服務中,這樣spring就可以實現嵌套事務。

提前致謝,

瓦利

當您進入 service2 的 method2 時,service1 的事務(比如tx1 )被暫停,並且一個新的事務被創建到 service2 (比如tx2 )。 這個新事務獨立於先前的事務,並且將獨立提交或回滾。

tx2 將在您從 service2 返回時提交/回滾,之后 tx1 將從暫停的點恢復。 tx2 的結果(無論是提交還是回滾)都不會影響 tx1 的行為。

請閱讀Spring 文檔 查看第 16.5.7 節以獲取有關事務傳播的更多信息。

暫無
暫無

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

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