spring执行事务提交后进行一些逻辑操作

在使用spring事务时,我们通常会把事务内的所有操作当成是一个原子操作。也就是当整个事务内的所有代码都执行完成后, 才会将所有的数据落实到数据库中。这样做有时也会给我们造成麻烦。比如以下场景:

 

根据图中描述的逻辑,如果我们把前两步封装到一个事务方法中,会造成当第三方服务回调我们服务时,我们根据id去查询记录时,发现记录不存在。

这说明,我们第一步执行的方法并没有生效。原因就是因为第1步和第2步同时存在于一个事务中,所以当执行第二步时, 数据库并没有生效,而此时,

第三方服务如果处理比较快的时候,会立即回调我们,造成我们库里面查不到数据的情况。

解决方案:我们可以让第二步在第一步完全执行完成之后再去执行,这个时候就需要用到事务后提交操作。

 

demo: 
在事务方法中写入如下代码:decisionService.restdecision(bestbuyOrder);就是我们图中所说的步骤2.这样就可以保证在步骤1完全入库后再执行步骤2.这样再查询就不会出现查不到的情况了。

 

TransactionSynchronizationManager.registerSynchronization(new TransactionSynchronizationAdapter() {
    @Override
    public void afterCommit() {
        decisionService.restdecision(bestbuyOrder);
    }
});

 

转载于:https://www.cnblogs.com/Mr-Rocker/p/9295698.html

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值