Spring 事务踩坑记录

发布时间:2024年01月19日

默认事务传播级别:REQUIRED

ClassA:REQUIRED

if (TransactionSynchronizationManager.isActualTransactionActive()) {
            TransactionSynchronizationManager.registerSynchronization(new TransactionSynchronizationAdapter() {
                @SneakyThrows
                @Override
                public void afterCommit() {
                    handle(xxxx,xxxx,xxx);
                }
            });
        }

?ClassB:REQUIRED
handle中也存在,事务提交后执行

if (TransactionSynchronizationManager.isActualTransactionActive()) {
            TransactionSynchronizationManager.registerSynchronization(new TransactionSynchronizationAdapter() {
                @SneakyThrows
                @Override
                public void afterCommit() {
                    handleB(xxxx,xxxx,xxx);
                }
            });
        }

问题:handleB在事务提交后,不会被唤起

猜测:REQUIRED以加入事务方式运行,子方法里的afterCommit逻辑没保留?
暂时处理:ClassB传播级别调整为REQUIRED_NEW或NESTED可以暂时解决(两种根据事务回滚情况,酌情选择),(ClassB用的地方多的话,考虑重载方法)

具体原因后续扒源码分析下

文章来源:https://blog.csdn.net/qq_32647655/article/details/135698199
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。