我正在使用 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 子类!)
如果您想阻止提交,您可能应该实现void beforeCommit(boolean readOnly)
这一点并在其中抛出一个。 根据文档,抛出异常的效果如下: RuntimeException
投掷:
java.lang.RuntimeException
- 如果出现错误;将传播到调用者(注意:不要在这里抛出 TransactionException 子类!)
添加回答
举报
0/150
提交
取消