一:傳播行為
二:隔離級別
三:只讀提示
四:事務(wù)超時間隔
傳播行為:
所謂事務(wù)的傳播行為是指,如果在開始當前事務(wù)之前,一個事務(wù)上下文已經(jīng)存在,此時有若干選項可以指定一個事務(wù)性方法的執(zhí)行行為。
spring的事務(wù)傳播規(guī)則:
傳播行為 | 意義 |
PROPAGATION_REQUIRED | 如果當前存在事務(wù),則加入該事務(wù);如果當前沒有事務(wù),則創(chuàng)建一個新的事務(wù)。 |
PROPAGATION_REQUIRES_NEW | 創(chuàng)建一個新的事務(wù),如果當前存在事務(wù),則把當前事務(wù)掛起。 |
PROPAGATION_SUPPORTS | 如果當前存在事務(wù),則加入該事務(wù);如果當前沒有事務(wù),則以非事務(wù)的方式繼續(xù)運行。 |
PROPAGATION_NOT_SUPPORTED | 以非事務(wù)方式運行,如果當前存在事務(wù),則把當前事務(wù)掛起。 |
PROPAGATION_NEVER | 以非事務(wù)方式運行,如果當前存在事務(wù),則拋出異常 |
PROPAGATION_MANDATORY | 如果當前存在事務(wù),則加入該事務(wù);如果當前沒有事務(wù),則拋出異常。 |
PROPAGATION_NESTED | 如果當前存在事務(wù),則創(chuàng)建一個事務(wù)作為當前事務(wù)的嵌套事務(wù)來運行; 如果當前沒有事務(wù),則該取值等價于TransactionDefinition.PROPAGATION_REQUIRED。 |
隔離級別:
隔離級別是指若干個并發(fā)的事務(wù)之間的隔離程度。
spring的事務(wù)隔離級別:
隔離級別 | 含義 |
ISOLATION_DEFAULT | 這是默認值,表示使用底層數(shù)據(jù)庫的默認隔離級別。對大部分數(shù)據(jù)庫而言,通常這值就是ISOLATION_READ_COMMITTED。 |
ISOLATION_READ_UNCOMMITTED | 該隔離級別表示一個事務(wù)可以讀取另一個事務(wù)修改但還沒有提交的數(shù)據(jù)。該級別不能防止臟讀和不可重復(fù)讀,因此很少使用該隔離級別。 |
ISOLATION_READ_COMMITTED | 該隔離級別表示一個事務(wù)只能讀取另一個事務(wù)已經(jīng)提交的數(shù)據(jù)。該級別可以防止臟讀,這也是大多數(shù)情況下的推薦值。 |
ISOLATION_REPEATABLE_READ | 該隔離級別表示一個事務(wù)在整個過程中可以多次重復(fù)執(zhí) 行某個查詢,并且每次返回的記錄都相同。即使在多次查詢之間有新增的數(shù)據(jù)滿足該查詢,這些新增的記錄也會被忽略。該級別可以防止臟讀和不可重復(fù)讀。 |
ISOLATION_SERIALIZABLE | 所有的事務(wù)依次逐個執(zhí)行,這樣事務(wù)之間就完全不可能產(chǎn)生干擾,也就是說,該級別可以防止臟讀、不可重復(fù)讀以及幻讀。但是這將嚴重影響程序的性能。通常情況下也不會用到該級別。 |
只讀提示:
事務(wù)的只讀屬性是指,對事務(wù)性資源進行只讀操作或者是讀寫操作。所謂事務(wù)性資源就是指那些被事務(wù)管理的資源,比如數(shù)據(jù)源、 JMS 資源,以及自定義的事務(wù)性資源等等。如果確定只對事務(wù)性資源進行只讀操作,那么我們可以將事務(wù)標志為只讀的,以提高事務(wù)處理的性能。在 TransactionDefinition 中以 boolean 類型來表示該事務(wù)是否只讀。
事務(wù)超時間隔:
所謂事務(wù)超時,就是指一個事務(wù)所允許執(zhí)行的長時間,如果超過該時間限制但事務(wù)還沒有完成,則自動回滾事務(wù)。在 TransactionDefinition 中以 int 的值來表示超時時間,其單位是秒。