该样例工程介绍 AT 模式下,Spring Boot 框架如何通过 GTS 保证跨数据库转账的分布式事务的一致性。

样例逻辑说明

从 A 账户向 B 账户转账。为了触发应用异常,样例故意先给 B 账户打款,然后从 A 账户扣款后检查 A 账户余额。如果为负值则抛出应用异常,导致全局事务回滚。

搭建样例

  1. 初始化数据库。
    1. 在两个数据库分别执行 sample-txc-springboot.sqltxc_undo_log.sql,创建 txc_undo_log 表。
    2. 分别在两个数据库执行 txc_sample_springcloud.sql 中的相关命令,创建 account 表。
  2. 下载样例 txc-yun-sample并上传到 ECS 上。
  3. 修改样例配置。
    1. 找到并打开 AccConfig.java 文件,在 txcTransactionScaner 方法中修改 GTS 的逻辑组名。
      事务逻辑组名需要使用包含 ID 和 Region 信息的全名,例如 gtstest.432242345522.HZ
    2. 找到并打开 application.properties 文件,将 accessKeysecretKey 的值修改为您实际账号的值。
      说明 请使用主账户的 Access Key ID/Access Key Secret。如果使用 RAM 子账户的 Access Key ID/Access Key Secret,需要先使用主账户对子账户进行授权。
    3. 找到并打开 application.properties 文件,将两个数据库的 urlusernamepassword 的值修改为您实际使用的值。
  4. 运行 txc-yun-sample/sample-txc-springcloud 目录下的 sh build.sh 脚本,编译工程。
    编译后会在相应文件中生产 client 目录。
  5. sample-txc-springboot/client/bin 目录下运行 sh pay_run.sh,启动样例。

结果验证

  1. 使用浏览器访问地址 http://<ECS IP>:8080/pay。
    初始化金额
  2. 输入重置金额,然后单击提交
    输入金额
  3. 输入转账金额,然后单击提交
    转账
  4. 余额不足,转账失败,全局事务回滚。
    事务回滚