[英]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()創建新的事務。
您有兩種選擇:
將方法三移到單獨的類。
將模式從代理更改為AspectJ,這會將事務邏輯編織到類本身中。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.