事务方法内先提交事务,再进行其他操作

Posted ZK_小姜

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了事务方法内先提交事务,再进行其他操作相关的知识,希望对你有一定的参考价值。

问题描述:有时候会有这种场景,一个事务方法中,有两步操作,操作一为插入数据库操作,操作二把操作一插入数据的id发给其他系统,其他系统拿到id后来查询数据,但是会发现有时候系统运行比较快的时候,查询数据会查不到。

原因:因为两步操作都是在一个事务方法中的,操作二虽然拿到了操作一插入数据的id,然后发给了其他系统,但是这个时候,其实还不能保证事务已经提交了,所以其他的系统通过id来查询数据,会发现有时候查不到。

解决办法

方法一: 把操作二从事务方法中分离出来,然后放到事务方法后面去执行;

方法二:在事务方法中加入如下代码:

TransactionSynchronizationManager.registerSynchronization(new TransactionSynchronizationAdapter() 
            @Override
            public void afterCommit() 
               //操作二
            
        );

以上是关于事务方法内先提交事务,再进行其他操作的主要内容,如果未能解决你的问题,请参考以下文章

Spring 嵌套事务提交时机对其他查询操作的影响分析

Spring 嵌套事务提交时机对其他查询操作的影响分析

Oracle 事务操作(事务的回滚与提交)

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

数据库事务的四种隔离级别

事务与自动提交