簡體   English   中英

遞歸調用上的春季交易

[英]Spring transactions on recursive calls

我有一種方法,該方法使用Spring的事務模板以編程方式啟動事務。

Void methodA() {
    TransactionTmeplate..........

    Setpropgation to requires new....

    /// do my stuff in trasaction


}

因此,如果我有另一個調用此方法的類,它會像我期望的那樣創建事務。 但是,如果從同一調用線程再次輸入此方法,會發生什么情況。 是否創建另一個交易?

例:

MethodCaller -> methodA (transaction created) -> methodD -> methodA(??)

接下來:

同樣,如果class是@autowired ,考慮到存在一個實例,兩個調用線程是否會共享同一事務?

我假設沒有,因為他們在方法的堆棧上有自己的條目。

關於Propagation.REQUIRES_NEW的javadoc很清楚,我不確定是否可以更好地解釋它。

至於調用您的方法的不同線程: TransactionManager將確保線程不會在事務方面相互交錯。

但是擁有可重入且始終啟動新事務的方法,則表明您的應用程序未正確分層。 嘗試進行一些重構,並確保不會以遞歸方式調用負責啟動新事務的方法。

暫無
暫無

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

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