自学内容网 自学内容网

Spring 事务踩坑记录

默认事务传播级别: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

免责声明:本站文章内容转载自网络资源,如本站内容侵犯了原著者的合法权益,可联系本站删除。更多内容请关注自学内容网(zxcms.com)!