该样例工程介绍 AT 模式下,Spring Boot 框架如何通过 GTS 保证跨数据库转账的分布式事务的一致性。
前提条件
在使用样例前,请先完成以下工作:
- 准备两个 RDS 实例,用户创建数据库。
- 准备一个 ECS 实例,用于部署本样例。
样例逻辑说明
从 A 账户向 B 账户转账。为了触发应用异常,样例故意先给 B 账户打款,然后从 A 账户扣款后检查 A 账户余额。如果为负值则抛出应用异常,导致全局事务回滚。
搭建样例
- 初始化数据库。
- 在两个数据库分别执行 sample-txc-springboot.sql 和 txc_undo_log.sql,创建 txc_undo_log 表。
- 分别在两个数据库执行 txc_sample_springcloud.sql 中的相关命令,创建 account 表。
- 下载样例 txc-yun-sample并上传到 ECS 上。
- 修改样例配置。
- 找到并打开 AccConfig.java 文件,在 txcTransactionScaner 方法中修改 GTS 的逻辑组名。
事务逻辑组名需要使用包含 ID 和 Region 信息的全名,例如 gtstest.432242345522.HZ。
- 找到并打开 application.properties 文件,将 accessKey 和 secretKey 的值修改为您实际账号的值。
说明 请使用主账户的 Access Key ID/Access Key Secret。如果使用 RAM 子账户的 Access Key ID/Access Key Secret,需要先使用主账户对子账户进行授权。
- 找到并打开 application.properties 文件,将两个数据库的 url、username和 password 的值修改为您实际使用的值。
- 运行 txc-yun-sample/sample-txc-springcloud 目录下的 sh build.sh 脚本,编译工程。
编译后会在相应文件中生产 client 目录。
- 在 sample-txc-springboot/client/bin 目录下运行 sh pay_run.sh,启动样例。
结果验证
- 使用浏览器访问地址 http://<ECS IP>:8080/pay。
- 输入重置金额,然后单击提交。
- 输入转账金额,然后单击提交。
- 余额不足,转账失败,全局事务回滚。