我正在使用 SpringTransactionSynchronizationManager注冊回調,beforeCompletion如下所示:@Transactionalpublic void doTransaction() { //do DB stuff updateDB(); //register a synchronization TransactionSynchronizationManager.registerSynchronization(new TransactionSynchronization() { @Override public void beforeCompletion() { if(!isCallApiSuccessful()) { //rollback the transaction } } });}問題是如何從回調中回滾事務beforeCompletion?拋出異常會起作用嗎?
1 回答

忽然笑
TA貢獻1806條經驗 獲得超5個贊
拋出異常會起作用嗎?
不,它不會起作用,因為beforeCompletion()
它是為了清理資源。
根據文檔,拋出異常的效果如下:
投擲:
java.lang.RuntimeException
- 如果出現錯誤;將被記錄但不會傳播(注意:不要在這里拋出 TransactionException 子類?。?/p>
如果您想阻止提交,您可能應該實現void beforeCommit(boolean readOnly)
這一點并在其中拋出一個。 根據文檔,拋出異常的效果如下: RuntimeException
投擲:
java.lang.RuntimeException
- 如果出現錯誤;將傳播到調用者(注意:不要在這里拋出 TransactionException 子類?。?/p>
添加回答
舉報
0/150
提交
取消