概述
學習一個框架,我喜歡從demo中瞭解該框架所能達到的效果再進行深入地學習。本篇文章將會介紹 seata 的一個入門使用 demo ,作爲使用 seata 的入門學習文章。
使用案例
首先到github 中下載一個 RM 的運行服務,本例中使用的是 :
https://github.com/seata/seata/releases/download/v1.2.0/seata-server-1.2.0.zip
解壓後在 /bin 路徑下啓動 bat 文件
接着自然就是demo 資源的下載了 :
https://github.com/seata/seata-samples
我們這裏是使用的 MyBatis 和 Spring boot 和 seata 的整個案例,所涉及的 SQL 語句在 demo 路徑下的 sql 文件夾下 :
可以看到 springboot-mybatis 共有5個子項目,我們本地執行完sql ,記得修改每個子項目中的 application.yml 文件中關於數據庫的配置 ,例如 :
server:
port: 8082
spring:
datasource:
type: com.alibaba.druid.pool.DruidDataSource
driver-class-name: com.mysql.jdbc.Driver
url: jdbc:mysql://127.0.0.1:3306/db_order?useSSL=false&serverTimezone=UTC
username: root
password: 12345678
seata:
....
....
修改完啓動,其中sbm-business-service 有個Controller 提供接口供我們測試 :
@RequestMapping("/api/business")
@RestController
public class BusinessController {
@Autowired
private BusinessService businessService;
/**
* 購買下單,模擬全局事務提交
*
* @return
*/
@RequestMapping("/purchase/commit")
public Boolean purchaseCommit(HttpServletRequest request) {
businessService.purchase("1001", "2001", 1);
return true;
}
/**
* 購買下單,模擬全局事務回滾
*
* @return
*/
@RequestMapping("/purchase/rollback")
public Boolean purchaseRollback() {
try {
businessService.purchase("1002", "2001", 1);
} catch (Exception e) {
e.printStackTrace();
return false;
}
return true;
}
}
可以看到這是一個模擬購物,訂單和用戶餘額還有貨物的例子,我們可以看一下數據庫中的金額, 邏輯: 用戶扣錢-> 庫存-1 -> 訂單庫插入一條數據
這幾個操作是不同事務,執行成功的話應該會同時一起執行,失敗的話會一起回滾。
postman 調用 : localhost:8084/api/business/purchase/commit ,我們看一下執行成功後的結果 :
db_account.account_tbl 表的數據
id user_id money
1 1001 9995
2 1002 10000
db_storage.storage_tbl 中的數據
id commodity_code count
1 2001 999
db_order.order_tbl 表中的數據
id user_id commodity_code count money
1 1001 2001 1 5
ok,事務執行是成功的。
總結
該篇只是簡單地介紹 seata 框架demo 等簡單使用,方便大家入門,後續將繼續深入 seata 的學習