gpt4 book ai didi

java - 从 beforeCompletion TransactionSynchronization 回滚事务?

转载 作者:行者123 更新时间:2023-12-02 09:31:07 25 4
gpt4 key购买 nike

我正在使用 Spring TransactionSynchronizationManager 注册一个 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 回调中回滚事务?抛出异常会起作用吗?

最佳答案

Would throwing an exception work?

不,它不会工作,因为 beforeCompletion() 用于清理资源。
根据文档,以下是抛出异常的效果:

Throws:

java.lang.RuntimeException - in case of errors; will be logged but not propagated (note: do not throw TransactionException subclasses here!)

您可能应该实现 void beforeCommit(boolean readOnly) 来实现这一点,如果您想阻止提交,则在其中抛出 RuntimeException
根据文档,以下是抛出异常的效果:

Throws:

java.lang.RuntimeException - in case of errors; will be propagated to the caller (note: do not throw TransactionException subclasses here!)

关于java - 从 beforeCompletion TransactionSynchronization 回滚事务?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57963913/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com