spring分為程式設計式事務和宣告式事務
宣告式事務:
spring給了乙個約定(aop開發也給了我們乙個約定),如果使用的是宣告式事務,那麼當你的業務方法不發生異常(或者發生異常,但該異常也被配置資訊允許提交事務)時,spring就會讓事務管理器提交事務,而發生異常(並且該異常不被你的配置資訊所允許提交事務)時,則讓事務管理器回滾事務。
程式設計式需要自己手動寫事務的回滾
配置位置檔案
name表示要那些方法需要控制 支援萬用字元*
read-only="true"
表示唯讀事務如果
true
表示唯讀事務資料庫會優化
,會對效能由一定的提公升
,只要是查詢的方法建議使用
false
為需要提交的事務
propagation:控制事務傳播,傳播行為
當乙個具有事務控制的方法,另外乙個具有事務控制的方法呼叫後,需要如何管理事務
propagation裡面有7個屬性:
required(預設值):表示如果當前有事務,就在事務中執行,如果沒有就新建乙個事務
supports:表示如果當前有事務,就在事務中執行,如果沒有就在乙個非事務的狀態執行
mandatory:必須在事務中執行,如果有事務就在事務中執行,如果沒有事務就報錯
requires_new:必須在事務中執行,,表示如果當前沒有有事務,就在事務中執行,如果沒有就新建乙個事務,如果有事務,就把當前事務掛起
never:必須在非事務中執行,如果沒有事務,正常執行,如果有事務,報錯
not supports ,必須在非事務中執行
nested:必須在事務中執行,如果沒有事務就新建事務,如果有事務就巢狀乙個事務
事務隔離(ioslation):
在多執行緒併發訪問下保證訪問到資料是對的
1髒讀 乙個事務(a)讀取到了乙個事務(b)中未提交的資料,另乙個事務可能進行了改變,那此時,a讀取到的資料就可能和資料庫中的資料可能是不一致的,此時認為資料是髒資料.
2不可重複讀
主要針對的某一行(列)資料,, 主要針對的是修改資料,不可重複讀
兩次讀在用乙個事務內
當事務a讀取到的資料,事務b進行了修改,此時,事務a讀取到的不一致,此過程不可讀
解決問題:限制某一列
3,幻讀,
主要針對的操作是新增,或者刪除,他是兩次事務的結果
事務a按照特定的條件查詢出結果,事務b新增了一條符合條件的資料,a查詢到的資料和資料庫中的資料不一致,a事務好像出現了幻覺
ioslation有五個屬性值,分別解決不同的問題
default:有底層資料自動判斷,使用什麼隔離級別
read_uncommitted:可以讀取未提交資料,可能出現髒讀,不可重複讀,, 效率最高
read_committed 只能讀取其他已提交資料,防止髒讀,可能出現重複讀
repeatable_read,讀取到的資料會被新增鎖,防止其他事務修改此事務,防止髒讀,重複讀,可能出現幻讀
serializable,排隊操作,對整個表新增鎖,乙個事務在操作時,另乙個事務等到(最安全的)
Spring宣告式事務
net.sf.hibernate.dialect.oracle9dialect false true net.sf.hibernate.transaction.jdbctransactionfactory 1025 用heibernate來管理事務 當用spring和heibernate一起完成da...
spring宣告式事務
1.什麼是事務 事務是程式中一系列嚴密的操作,所有操作執行必須成功完成,否則在每個操作所做的更改將會被撤銷,這也是事務的原子性 要麼成功,要麼失敗 2.事務的特性 事務特性分為四個 原子性 atomicity 一致性 consistency 隔離性 isolation 持續性 durability ...
Spring 宣告式事務
propagation 事務傳播機制有如下幾種 required 預設值,表示如果存在乙個事務,則支援當前事務 如果沒有事務,則開啟乙個新事務。requires new 表示總是開啟乙個新的事務,如果乙個事務已經存在,則將這個存在的事務掛起,開啟新事務執行該方法。mandatory 表示如果存在乙個...