开发者社区 > 云原生 > 中间件 > 正文

Seata中请问事务还没结束就可以看到b、c数据库有新增的数据这个不会有问题吗?

Seata中文档脏读中举例的基本都是update操作,没看到insert后在selectAll的,总不能 select * from xx for update,也没看到微服务的相关的demo,服务A调用服务B、C,都加了@Transactional、 @GlobalTransactional,事务还没结束就可以看到b、c数据库有新增的数据,如果这时候调用list接口可以看到未提交的数据,是哪一步做出错了呀?都是很简单的demo,配置也没改,都是默认配置,各个服务通过feign调用insert操作,每个insert方法都有@Transactional、 @GlobalTransactional。请问事务还没结束就可以看到b、c数据库有新增的数据这个不会有问题吗?

lQLPJxbhmkvQnWLNA5TNBNiwYD6WJKbsG5QDcrGck4AdAA_1240_916.png

加了Globallock还是会出现脏读,用的是默认模式AT 。

展开
收起
fuxixi 2022-11-20 20:27:42 500 0
2 条回答
写回答
取消 提交回答
  • 你在调用list接口的时候加上@GlobalTransactional注解试试看,应该就不会查询出全局事务未结束后的数据了

    2023-02-11 22:48:21
    赞同 展开评论 打赏
  • 防脏读加Globallock注解,update只是举例而已,有没有问题取决于你的场景,如果觉得有问题你可以选择适合你的事务模式,比如xa,tcc。saga这种不保证隔离性的肯定是会脏读。for update。 此答案整理自钉钉群“3群-Seata 开源讨论群”

    2022-11-20 21:33:43
    赞同 展开评论 打赏

为企业提供高效、稳定、易扩展的中间件产品。

相关电子书

更多
国产数据库研制人才培养实践 立即下载
阿里云&信通院《Serverless数据库技术研究报告》 立即下载
《Seata 1.3 新特性以及如何参与社区》 立即下载