gpt4 book ai didi

java - 通过 ID 获取 Spring 事务并检查状态

转载 作者:太空宇宙 更新时间:2023-11-04 13:25:44 25 4
gpt4 key购买 nike

有什么方法可以获取当前的交易ID,存储/传递它,并在应用程序的另一部分检查它的状态?

例如:

@Service
public class Service {
...
@Transactional(rollbackFor = Exception.class)
public void performAction(Action action) {
// start action
String transactionId = ??? // getting current transaction id
messenger.send(transactionId); // sending transaction id to consumer
// continue action
} <- commit transaction
}

public class Consumer {
...
public void onRecieveMessage(String transactionId) {
TransactionStatus ts = ??? // getting transaction from pool by id
if (ts.isCompleted()) {
// some actions
} else {
// wating or Future<?> or something else...
}
}
}

(实际上,问题是 Consumer.onRecieveMessage 执行早于操作的事务完成,并且数据状态是旧的)

最佳答案

我不知道有什么方法可以通过 ID 获取特定交易(希望有人知道)。

我要做的是实现一个 TransactionSynchronization 实例,其中包含您想要跟踪的一种值:

public class YourTransactionTracker extends TransactionSynchronizationAdapter {

private Value value;

public YourTransactionTracker(Value value) {
this.value = value;
}

@Override
public void afterCompletion(int status) {
//transaction handling your 'value' has been completed with the status 'status'
//do whatever you want here
}

//you can also override other methods like beforeCompletion(), flush(), etc...
//have a look at TransactionSynchronizationAdapter
}

TransactionSynchronizationAdapter 只是带有空方法的 TransactionSynchronization 的实现。

然后,您可以使用 TransactionSynchronization 实例在事务中 Hook 回调,该回调将在事务生命周期的不同阶段调用。

您可以使用 TransactionSynchronizationManager 在 Spring 中执行此操作:

    TransactionSynchronizationManager.registerSynchronization(
new YourTransactionTracker(theValueYouAreTracking);

关于java - 通过 ID 获取 Spring 事务并检查状态,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32680989/

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