事務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.一致性 一致性和原子性...