事務 分布式事務

2021-10-07 12:50:58 字數 2198 閱讀 8075

事務:邏輯上的一組操作,要麼都成功要麼都失敗

事務的四個特性: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 語句塊中將自行...