[英]When calling a spring Non-Transactional method from a Transactional Method in another instance, does the transaction get propagated?
對不起,如果之前已經討論過,但我在@Transactional spring java 注釋的所有相關討論中找不到答案。
如果我們從具有 @Transactional 注釋的方法調用另一個沒有 @Transactional 注釋的實例中的方法,會發生什么? 來自@Transactaional 注釋方法的事務會被暫停嗎? 還是會被傳播?
我發現了很多關於對第二個方法的調用是否來自同一個實例的討論,而不是第二個非事務性方法是否在另一個實例中。 感謝您的幫助!
就像下面的例子,如果從類 A 中的 methoda() 調用類 B 中的 methodb() 會發生什么? 來自methoda的事務會被傳播還是methodb是非事務性的?
示例代碼如下:
public class A
{
@Autowired
B b;
@Transactional
public void methoda(){
b.methodb();
}
}
@Component
public class B
{
//this method is non transactional and is called from method A in class A
public void methodb()
{
//do some db updates
}
}
如果 B 中沒有 @Transactional 注釋來告訴它其他情況,那么 b 方法使用在對 A.methoda 的調用中建立的事務。 這對於 Spring 來說是正常的,我們有標記為事務性的組件,它們調用參與當前事務的 DAO,而本身沒有被標記為事務性。
如果你真的想掛起當前的事務,你可以在b方法中添加這個注解:
@Transactional(propagation = Propagation.NOT_SUPPORTED)
Spring API 文檔中有一個關於暫停事務的警告:
注意:實際的事務暫停不會在所有事務管理器上開箱即用。 這尤其適用於 JtaTransactionManager,它需要 javax.transaction.TransactionManager 對其可用(在標准 Java EE 中是特定於服務器的)。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.