簡體   English   中英

在另一個實例中從事務方法調用 spring 非事務方法時,事務是否得到傳播?

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

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