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

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