基础介绍
- seata Github地址 https://github.com/seata/seata
- seata 文档 Seata 是什么? | Apache Seata
- seata 示例 https://github.com/seata/seata-samples
- seata 最新版本
PS:一般需要分布式事务的场景大多数都是微服务化,个人并不建议在单体项目引入多数据源+分布式事务,有能力尽早拆开,可为过度方案。
注意事项
dynamic-datasource-sring-boot-starter 组件内部开启seata后会自动使用DataSourceProxy来包装DataSource,所以需要以下方式来保持兼容。
1.如果你引入的是seata-all,请不要使用@EnableAutoDataSourceProxy注解。
2.如果你引入的是seata-spring-boot-starter 请关闭自动代理。
seata:
enable-auto-data-source-proxy: false
示例项目
此工程为 多数据源+druid+seata+mybatisPlus的版本。
模拟用户下单,扣商品库存,扣用户余额,初步可分为订单服务+商品服务+用户服务。
环境准备
为了快速演示相关环境都采用docker部署,生产上线请参考seata官方文档使用。
- 准备seata-server。
docker run --name seata-server -p 8091:8091 -d seataio/seata-server
- 准备mysql数据库,账户root密码123456。
docker run --name mysql -p 3306:3306 -e MYSQL_ROOT_PASSWORD=123456 -d mysql:5.7
- 创建相关数据库。
创建 seata-orderseata-productseata-account 模拟连接不同的数据库。
CREATE DAT