簡體   English   中英

Spring交易REQUIRES_NEW是否會傳播到方法中的方法?

[英]Will Spring transaction REQUIRES_NEW be propagated to the methods within the method?

我的要求是從method2提交/回滾更改,而不依賴於外部事務。 因此,我使用REQUIRES_NEW提交了內部事務。 但是我需要澄清一下其他方法從該方法調用時將保持的傳播類型。

@Transactional(propagation=Propagation.REQUIRES_NEW)
public String method1(long id) {
    ABC obj = method2(id);
    method3(obj);
    myDAO.saveOrUpdate(obj);
}

private ABC method2(long id) {
    ABC obj1 = myDAO.readData(id);
    ...
    ...
    return obj1;
}

private void method3(ABC obj) {
    ABC obj1 = (ABC)obj.clone();
    obj1.setId(123);
    obj1.setName("Name");
    myDAO.persist(obj1);
}

現在的問題是,即使將傳播設置為REQUIRES_NEW ,數據也不會在method3method1提交。 還是只能在DAO層中進行這種傳播?

正如我在您的代碼中看到的那樣,method2(..)屬於調用method1(..)的同一對象,並且導致method2()使用由method1創建的相同新事務,此行為是由代理模式spring use i強制執行的引用:

在代理模式(默認設置)下,僅攔截通過代理傳入的外部方法調用。 這意味着自調用實際上是目標對象中的一種方法,它調用目標對象的另一種方法,即使調用的方法標記有@Transactional,也不會在運行時導致實際事務。

要進行兩次交易,必須在另一個對象中創建第二個方法,並用@Transactional(propagation=Propagation.REQUIRES_NEW)進行注釋才能達到預期的效果

暫無
暫無

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

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