seata本地事务失效

注意:本事务失效是Seata的分布式事务控制已经有作用的情况下,远程事务能回滚,但是本地事务不能回滚的情况。

1、问题描述

  使用seata做了分布式事务控制,在本地事务A上添加了全局事务注解,在手动制造异常进行测试时,远程的两个分支事务能正常回滚,但是本地事务没有正常回滚。

2、问题查找

  在异常之前打了断点,然后在没有执行回滚之前查看数据库中的undo-log表的事务回滚的前置镜像数据,发现在回滚的条目字段中的一个tinyint类型的值有问题,本来存的是1,但是前置镜像中自动映射的却是true(mysql数据库的tinyint可以映射为boolea类型)。

  于是我就将该字段类型改为int,再次测试,发现问题消失。难道seata进行事务控制时不能使用tinyint类型吗?肯定不会。于是我再次把字段类型改为tinyint,然后长度设置为2(原本长度为1),再次测试,问题没有发生,事务正常回滚,查看前置镜像,数据也正常存储为1并不是映射为true,不信邪的我再次将字段设置为tinyint长度为1,再次测试,问题又出现了,本来值为1但是在前置镜像中值就变成了true,疯了。

3、问题总结

  最后也没有找出问题的原因,只能不优雅的将字段设置为tinyint长度为2来解决问题,也许是我的seata配置有问题,如果有大佬知道是什么原因造成的,希望能指点一下。谢谢。

  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 7
    评论
评论 7
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值