如何回滾嵌套事務?假設如果 method5 中有例外,那么如何回滾 method4 也會發生變化。
@Singleton
public class Case {
@Inject
CaseService caseService;
@Transactional
void method2(){
var value = caseService.method4();
caseService.method5(value);
}
}
@Singleton
public class CaseService {
@Transactional(Transactional.TxType.REQUIRES_NEW)
public String method4(){
return "some";
}
@Transactional(Transactional.TxType.REQUIRES_NEW)
public void method5(String value){
}
}
uj5u.com熱心網友回復:
如果要回滾method4呼叫,則其陳述句應與method5.
在您提供的代碼中,method4并且method5始終在單獨的事務中執行。
所以,你可以洗掉REQUIRES_NEW屬性。
uj5u.com熱心網友回復:
REQUIRES_NEW無論之前的任何交易如何,都將始終創建新交易。因此,任何回滾只會發生在該事務上。你想要所有這些 ( method4, method5) 意味著method2應該是原子的。在這種情況下,所有這些都應該在同一個事務下,這意味著您只需要使用REQUIRED或根據您的用例開始一個新的事務method2,method4并且method5應該是 REQUIRED。
如果您的任何事務方法拋出,RuntimeException那么它們將自動回滾。如果您還希望對已檢查例外進行回滾,那么您需要在注釋中提及這一點。
(rollbackFor=CustomException.class)
轉載請註明出處,本文鏈接:https://www.uj5u.com/caozuo/336547.html
