簡體   English   中英

春季交易傳播和回滾行為

[英]Spring Transaction propogation and rollback behaviour

@Service
public Class Demo(){

    @Transactional(rollbackFor=CustomException.class)
    @Override
    public RetunType methodONE()throws Exception{
        methodTWO();
        methodFIVE();
    }

    @Transactional
    @Override
    public RetunType methodTWO()throws Exception{
            methodFOUR();
            methodTHREE();
            throws new CustomException("error_msg");
        }

    @Transactional(propagation=Propagation.REQUIRES_NEW)
    @Override
    public RetunType methodTHREE(){
        .
        ..
        .
        ..
        .
    }
 }

 public Class CustomException  extends Exception{

    public CustomException(String msg){
        super(msg)
    }
 }

我不想只回退我的methodThree事務。 現在,它回滾在方法2/3/4/5中所做的所有更改。 我無法進一步理解。

我正在嘗試在所有其他方法中進行與事務相關的代碼,而在methodThree()中,這只是數據庫中的狀態更新。

如果我了解您要在此處執行的操作是將方法THREE運行在嵌套在父事務中的自己的事務中,則您的問題可能是方法在同一類中。

這很重要,因為Spring應用AOP的方式(在這種情況下是通過應用事務邏輯,使用代理攔截方法調用)來實現的。 問題在於方法調用是內部調用或正在自動調用,因此永遠不會通過代理。 這意味着永遠不會為MethodThree()創建新的事務。

您有兩種選擇:

  1. 將方法三移到單獨的類。

  2. 將模式從代理更改為AspectJ,這會將事務邏輯編織到類本身中。

@Transactional的春季文檔

暫無
暫無

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

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