有些场景需要在事务完成后、完成前执行,可以使用待事务同步器进行,使用的方法很简单,代码如下。
1.这里演示的是事务完成后发送kafka消息。
2.目前来看其实在代码里,很多的操作是不应该影响本地事务的。如:调用第三方接口、发送mq消息。
3.当然也可以使用分布式事务框架来解决,具体还是要看使用的场景吧。
4.具体可以参考一下文章
TransactionSynchronizationManager
public void send(AssetsPassiveChangeResult passiveChange) {
if (TransactionSynchronizationManager.isActualTransactionActive()) {
TransactionSynchronizationManager.registerSynchronization(
new TransactionSynchronizationAdapter() {
@Override
public void afterCommit() {
// 事务完成后发送
sendKafka(passiveChange);
}
});
} else {
sendKafka(passiveChange);
}
}
- [ 萱儿AXW ]