Spring事務管理

2021-08-28 12:01:30 字數 2107 閱讀 2616

事務transaction定義:最小不可分割的邏輯工作單元,具有acid特性;

事務acid特性:

一致性consistency:乙個事務可以封裝狀態改變;

隔離性isolation:事務與事務之間相互隔離,主要特徵是保護性和不變性;

永續性durability:事務一旦完成提交,資料便持久儲存到資料庫,不會被回滾;

spring提供的兩種事務管理方式:

宣告式事務管理使業務**邏輯不受汙染,因此在實際使用中宣告式事務用得比較多;

@transactional()接收的屬性:

注意:@transactional()新增到類上即可修飾類中所有公開方法;新增到方法上可以覆蓋新增到類上的註解;

定義事務管理器

定義事務策略

@transactional(propagation=propagation.required) 如果沒有事務建立新事務, 如果當前有事務參與當前事務;

@transactional(propagation=propagation.requires_new)必須是新事務, 如果有當前事務, 掛起當前事務並且開啟新事務

@transactional(propagation=propagation.mandatory)必須有事務, 如果當前沒有事務就拋異常

@transactional(propagation=propagation.never)絕對不能有事務, 如果在事務中呼叫則丟擲異常

@transactional(propagation=propagation.nested)必須被巢狀到其他事務中

@transactional(propagation=propagation.not_supported)不支援事務

@transactional(propagation=propagation.supports)支援事務, 如果沒有事務也不會建立新事務

多個事務併發執行時可能會導致什麼問題?(髒讀,不可重複讀,幻讀)

當多個事務併發執行時,可通過設定事務的隔離級別保證事務的完整性,一致性。

事務的隔離級別從低到高有如下幾種方式:

1)read_uncommitted (此級別可能會出現髒讀)

2)read_committed(此級別可能會出現不可重複讀)

3)repeatable_read(此級別可能會出現幻讀)

4)serializable(多事務序列執行)

說明:spring中一般採用 @transactional(isolation=isolation.read_committed) 方式宣告級別, 這種方式是併發效能和安全性折中的選擇. 是大多數軟體專案採用的隔離級別.

檢視innodb儲存引擎 系統級的隔離級別 和 會話級的隔離級別

更改會話級的隔離級別

更改系統級的隔離級別

思考:1)mysql 中如何檢視當前系統預設隔離級別?

show variables like '%storage_engine%';

2)mysql 中如何設定事務隔離級別?

set session transaction isolation level 'reapable read'

Spring事務管理

spring是ssh中的管理員,負責管理其它框架,協調各個部分的工作。今天一起學習一下spring的事務管理。spring的事務管理分為宣告式跟程式設計式。宣告式就是在spring的配置檔案中進行相關配置 程式設計式就是用註解的方式寫到 裡。下面先說宣告式 spring配置檔案中關於事務配置總是由三...

spring事務管理

一 xml配置事務 二 註解的方式配置事務 bean id txmanaager class org.springframework.orm.hibernate3.hibernatetransactionmanager property name sessionfactory ref session...

spring 事務管理

和資料庫打交道的碼農都知道事務,事務有4大特徵,分別是原子性,一致性,隔離性,永續性。而spring 對事物提供了良好的支援,和api,通過簡單的配置,則可以減低程式設計師重複的操作。1.原子性 原子性指的是乙個事務內的所有操作要麼全部應用到資料庫,要麼取消對資料庫的操作。2.一致性 一致性和原子性...