猿问

从 beforeCompletion TransactionSynchroni 回滚事务?

我正在使用 SpringTransactionSynchronizationManager注册回调,beforeCompletion如下所示:


@Transactional

public void doTransaction() {

    //do DB stuff

    updateDB();


    //register a synchronization

    TransactionSynchronizationManager.registerSynchronization(new TransactionSynchronization() {

        @Override

        public void beforeCompletion() {

            if(!isCallApiSuccessful()) {

                //rollback the transaction

            }

        }

    });

}

问题是如何从回调中回滚事务beforeCompletion?抛出异常会起作用吗?


精慕HU
浏览 104回答 1
1回答

忽然笑

抛出异常会起作用吗?不,它不会起作用,因为beforeCompletion()它是为了清理资源。根据文档,抛出异常的效果如下:投掷:java.lang.RuntimeException- 如果出现错误;将被记录但不会传播(注意:不要在这里抛出 TransactionException 子类!)如果您想阻止提交,您可能应该实现void beforeCommit(boolean readOnly)这一点并在其中抛出一个。 根据文档,抛出异常的效果如下: RuntimeException投掷:java.lang.RuntimeException- 如果出现错误;将传播到调用者(注意:不要在这里抛出 TransactionException 子类!)
随时随地看视频慕课网APP

相关分类

Java
我要回答