事務的特性
併發事務帶來的問題
隔離級別
在mysql常用的儲存引擎中, 只有innodb支援事務, 所以這裡說的隔離級別指的是innodb下的事務隔離級別.
隔離級別
讀資料一致性
更新丟失
髒讀不可重複讀
幻讀讀未提交
最低級別, 只能保證不讀取物理上損壞的資料×√
√√讀已提交
語句級××√
√可重複讀
事務級×××
×可序列化
最高端別, 事務級××
××下面是spring事務註解的源**, 從中可以看到spring事務管理的四個屬性: propagation, isolation, timeout, readonly.
@target()
@retention(retentionpolicy.runtime)
@inherited
@documented
public @inte***ce transactional ;
string rollbackforclassname() default {};
class<? extends throwable> norollbackfor() default {};
string norollbackforclassname() default {};
}
事務傳播行為
public enum propagation
public int value()
}
事務傳播行為是指方法之間事務的傳播. 比如, 在方法a中呼叫了方法b:
事務隔離級別
public enum isolation
public int value()
}
其中 default 表示使用資料庫的隔離級別.
事務超時
為了解決事務執行時間太長, 消耗太多資源的問題, 我們可以給事務設定乙個超時時間, 如果事務執行時間超過了超時時間, 就回滾事務.
唯讀事務
一些不需要事務的方法, 比如讀取資料, 就可以設定為唯讀事務, 這樣可以有效地提高一些效能.
spring使用 transactiontemplate 事務模板來管理事務.
(1)dao層
public inte***ce accountdao
public class accountdaoimpl extends jdbcdaosupport implements accountdao
public void in(string inner, integer money)
}
(2)service層
public inte***ce accountservice
public class accountserviceimpl implements accountservice
public void settransactiontemplate(transactiontemplate transactiontemplate)
public void transfer(final string outer, final string inner, final integer money)
});}
}
(3)spring配置
(4)測試**
@test
public void demo()
(1)service層
public inte***ce accountservice
public class accountserviceimpl implements accountservice
public void transfer(string outer, string inner, integer money)
}
(2)spring配置檔案
propagation_required,isolation_default
(3)測試**
@test
public void demo()
基於xml配置
(1)service層
public inte***ce accountservice
public class accountserviceimpl implements accountservice
public void transfer(string outer, string inner, integer money)
}
(2)spring配置檔案
(3)測試**
@test
public void demo()
基於註解
(1)service層
@transactional(propagation = propagation.required, isolation = isolation.default)
public class accountserviceimpl implements accountservice
//或者 @transactional(propagation = propagation.required, isolation = isolation.default)
public void transfer(string outer, string inner, integer money)
}
(2)spring配置檔案
(3)測試**
@test
public void demo()
Spring之事務管理
spring事務管理高層抽象主要包括3個介面 1.platformtransactionmanager 事務管理器 實現類 datasourcetransactionmanager 使用spring jdbc或ibatis進行持久化資料時使用 實現類 hibernatetransactionmana...
spring之事務管理
spring對事務的管理,有兩種方式,分別是程式設計式事務和宣告式事務,常用的是宣告式的事務,採用宣告式的事務包括配置檔案的方式和註解的配置方式 1採用配置檔案的方式 1.1類 public class user public class userdao 增加錢 public void addmon...
Spring 學習筆記之事務管理
一 事務的特性 事務有四個特性 原子性 一致性 隔離性和永續性。二 spring事務管理只要包括的三個介面 1 platform transactionmanager 事務管理器 2 transactiondefinition 事務的定義資訊 隔離 傳播 超時 唯讀 3 transactionsta...