Spring宣告式事務

2022-08-19 04:45:11 字數 2445 閱讀 4434

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 表示如果存在乙個...