2011-11-04 88 views
3

我正在處理一個服務層,它在執行任務時記錄到數據庫。我希望確保在發生錯誤時不會回滾此日誌,因爲我應該始終記錄失敗的嘗試。下面是示例代碼來解釋我想要的是什麼。嵌套的Spring事務從不回滾

@Transactional(rollbackFor=Exception.class) 
public void performTask() 
{ 
    //Perform task 1 
    log("task1Complete"); 

    //Perform task 2 
    log("task2Complete"); 
} 

@Transactional() 
public void log(String message) 
{ 
    //commit message to DB 
    //This should never rollback 
} 

我假設這樣做的方式是開始一個新的交易,但我不知道如何。

回答

2

用途:

@Transactional(propagation = Propagation.REQUIRES_NEW) 

要知道,調用一個方法@Transactional的「這」將不會打開一個交易,如果你使用的是JDK代理或CGIL代理。您必須改用AspectJ,或者在另一個對象上調用它來通過它的代理。