其他网址

分布式事务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的库存数都改变。