分布式事务Seata和分库分表sharding-sphere的整合_
对应的github地址:https://github.com/dean4lee/distributed-transaction-demo/tree/master/springcloud-shardingjdbc-seata
springcloud-shardingjdbc-seata分布式事务_dean.lee的博客-
对应的github地址:https://github.com/dean4lee/distributed-transaction-demo
简介
说明
本文以实例整合sharding-jdbc-spring-boot-starter:4.1.1、spring-cloud-starter-alibaba-seata:2.2.3.RELEASE、seata-spring-boot-starter:1.4.1、mybatis-plus-boot-starter:3.4.1的动态数据源
项目地址:https://gitee.com/shapeless/demo_SpringCloud/tree/sharding-jdbc+seata-at
注意事项
本人参考过不下50篇博客,按照上边“其他网址”两篇博客才成功。
代码的关键点:
在入口业务的方法前加下边两个注解:
@GlobalTransactional
@Transactional在此方法的第一行写这句代码:TransactionTypeHolder.set(TransactionType.BASE); //在方法前加此注解是没用的:@ShardingTransactionType(value = TransactionType.BASE)
为什么还要加@Transactional?
因为我这个方法里边对一个表的操作是:插入后又更新了,若不加@Transactional,若在更新后报异常,则回滚会失败,而且会一直重试。详见:https://github.com/seata/seata/issues/3036
测试
分库分表且不报异常
http://localhost:6001/order/order/createShardingNormal?userId=1&productId=1&count=10&money=100
结果:
分库分表的sharding-jdbcx数据库的t_order_x表插入了一条订单数据
不分库分表的seata数据库的t_acount的金额和t_storage的库存数都改变。
分库分表且报异常
http://localhost:6001/order/order/createShardingFault?userId=1&productId=1&count=10&money=100
分库分表的sharding-jdbcx数据库的t_order_x表未插入订单数据
不分库分表的seata数据库的t_acount的金额和t_storage的库存数都未改变。
不分库分表且不报异常
http://localhost:6001/order/order/createNoShardingNormal?userId=1&productId=1&count=10&money=100
不分库分表的seata数据库的t_order表插入了一条订单数据
不分库分表的seata数据库的t_acount的金额和t_storage的库存数都改变。
不分库分表且报异常
http://localhost:6001/order/order/createNoShardingFault?userId=1&productId=1&count=10&money=100
不分库分表的seata数据库的t_order表插入了一条订单数据
不分库分表的seata数据库的t_acount的金额和t_storage的库存数都改变。
原创文章,作者:奋斗,如若转载,请注明出处:https://blog.ytso.com/150979.html