事務:邏輯上的一組操作,要麼都成功要麼都失敗
事務的四個特性:acid 原子性,一致性,隔離性,永續性
事務的隔離級別:
讀未提交:產生髒讀
讀已提交:不可重複讀
可重複讀:幻讀(mysql預設)
序列化讀:效能最低
傳播行為(7個)
七種傳播行為:
required 支援當前事務,如果不存在,就新建乙個
supports 支援當前事務,如果不存在,就不使用事務
mandatory 支援當前事務,如果不存在,丟擲異常
requires_new 如果有事務存在,掛起當前事務,建立乙個新的事務
not_supported 以非事務方式執行,如果有事務存在,掛起當前事務
never 以非事務方式執行,如果有事務存在,丟擲異常
nested 如果當前事務存在,則巢狀事務執行(巢狀式事務)
這七種事務傳播機制最常用的就兩種:
required:乙個事務,要麼成功,要麼失敗
requires_new:兩個不同事務,彼此之間沒有關係。乙個事務失敗了不影響另乙個事務
回滾策略
預設情況下的回滾策略:
唯讀事務
如果乙個方法標記為readonly=true事務,則代表該方法只能查詢,不能增刪改。readonly預設為false
給商品新增的事務標記為唯讀事務:
seata
前提:1.引入依賴
com.alibaba.cloud<
/groupid>
spring-cloud-alibaba-seata<
/artifactid>
2.0.0
.release<
/version>
<
/dependency>
io.seata<
/groupid>
seata-all<
/artifactid>
0.8.0
<
/version>
<
/dependency>
2.配置檔案
registry.conf:配置註冊中心和配置中心,預設是file。
該檔案包含兩部分配置:
註冊中心
配置中心
registry
eureka
redis
zk file
}config
apollo
zk file
}
file.conf:seata工作規則資訊
該檔案的命名取決於registry.conf配置中心的配置
transport
}## transaction log store
store
}service
client
}
datasourceconfig:配置**資料來源實現分支事務,如果沒有注入,事務無法成功回滾
每乙個微服務原來自己的資料來源都必須使用datasourceproxy**,這樣seata才能掌控所有事務。
@configuration
public
class
datasourceconfig
/** * 需要將 datasourceproxy 設定為主資料來源,否則事務無法回滾
** @param druiddatasource the druiddatasource
* @return the default datasource
*/@primary
@bean
("datasource"
)public datasource datasource
(druiddatasource druiddatasource)
}
3.註解@globaltransactional @transactional
主業務方法新增全域性事務:@globaltransactional
分支業務方法新增本地事務註解:@transactional
分布式事務 分布式事務的實現
如果在多個服務中需要對不同的資料庫進行操作。因為不同服務操作的資料庫都不同,所以保證在同乙個事務中完成操作顯然是不科學的。那實現分布式事務的思想 1 方法入口,建立一條日誌記錄,狀態定義為初始狀態,即儲存本條日誌記錄 可以儲存在資料庫中,也可以寫出到本地磁碟檔案 2 可以在非同步執行緒或在定時任務中...
分布式 分布式事務
是資料庫執行過程中的乙個邏輯單位,由乙個有限的資料庫操作序列構成。事務的acid四大特性 原子性 atomicity 事務作為乙個整體被執行。一致性 consistency 從乙個一致的狀態轉換到另乙個一致的狀態。隔離性 isolation 多個事務併發執行時,併發事務之間互相影響的程度。永續性 d...
分布式事務
transactionscope是.net framework 2.0版本後,新增了乙個命名空間using system.transactions。它的用途是為資料庫訪問提供了乙個 輕量級 區別於 sqltransaction 的事務 transactionscope 的 using 語句塊中將自行...