栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

Spring事务提交后处理TransactionSynchronizationManager#afterCommit

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

Spring事务提交后处理TransactionSynchronizationManager#afterCommit

Spring事务提交后处理

最近在业务处理中遇到一个锁表问题,经过排查发现是在微服务A中更新数据主表a,而更新方法中又通过RPC调用了另一个微服务B的函数,函数中更新数据子表b时也更新数据主表a,由于微服务A数据库事务并没有释放主表a的写库锁,微服务B更新数据时就会报出锁表的错误信息。

这个时候考虑到有两种解决方案,一个是分布式事务锁,一个是在微服务B中先将前面写库的事务进行commit。这里我们用的第二种方式。

实现方式如下示例:

if (TransactionSynchronizationManager.isActualTransactionActive()) {
    TransactionSynchronizationManager.registerSynchronization(new TransactionSynchronizationAdapter() {
        public void afterCommit() {
            try {
                // do some logic
            } catch (Exception e) {
                logger.error("afterCommit exception.");
            }
        }
    });
}

TransactionSynchronizationManager.isActualTransactionActive()能够判断当前是否有事务正在被执行;
TransactionSynchronizationAdapter是一个空的适配器,里面提供了几个空方法,其中afterCommit为事务提交后进行的业务处理,我们将微服务B中的写库逻辑移至此方法里。

参考文章:TransactionSynchronizationManager和TransactionSynchronizationAdapter

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/691223.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号