簡體   English   中英

鏈式交易注釋的奇怪行為

[英]Strange behaviour for chainned transactional annotation

我不知道它是如何工作的Spring的事務注釋。 因此,我沒有實際意義進行了下一次測試,但我發現了我的問題:

public class TransactionalTest {
    public void noTransaction(){
        required();
    }

    @Transactional(propagation = Propagation.SUPPORTS)
    public void supports(){
        required();
    }

    @Transactional(propagation = Propagation.REQUIRED)
    public void transaction(){
        required();
    }

    @Transactional(propagation = Propagation.REQUIRED)
    public void required(){
        mandatory();
    }

    @Transactional(isolation = Isolation.READ_UNCOMMITTED, propagation = Propagation.MANDATORY)
    public void mandatory(){
        doSomething();
    }

    private void doSomething(){
        //I don't feel like to do something.
    }
}

方法noTransactionsupports和對同一方法的transaction調用: required但只有最后一個( transaction )可以正常工作。 另外兩個還給我以下消息:找不到針對帶有傳播“強制性”標記的交易的現有交易

在實際情況下,我有一些非事務方法,這些方法調用以REQUIRED注釋的事務方法(工作正常)。 但是,如果非事務方法調用一個事務方法(用REQUIRED注釋),而該事務方法又調用了另一個用MANDATORY注釋的事務方法,則它將失敗。

為什么這種行為以及如何避免呢? 我注釋了所有調用transaccional方法的方法,以防萬一?

如果您使用默認的AOP方法Spring Proxy AOP,則通過將帶注釋的類與代理對象一起包裝來實現建議,該代理對象可以攔截並建議調用。 當您使用這樣的自我呼叫時,您將繞過代理服務器,並且該建議不會被應用。

如果確實需要在自調用上應用建議,則需要使用AspectJ AOP,它實際上是在修改所討論的類而不是修飾它。

暫無
暫無

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

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