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用的地方多的话,考虑重载方法)

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值