[英]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.