spring 中事物的說明

2022-04-17 22:15:27 字數 2719 閱讀 9216

本文主要介紹spring中事務的annotation

專案中某個功能20併發下響應時間為15ms,而期望指標為10ms。功能中包含9條sql,效能診斷初步定位在spring的事務處理上,耗時接近5ms,大致了解了下spring的transactional配置含義。

將propagation由propagation.requires_new改為propagation.required響應時間也只提高了0.5ms。具體還在調優中

以下是spring事務不同的annotation

// 業務方法需要在乙個事物中執行,如果方法執行時,已經存在乙個事物中,

// 那麼加入該事物,否則為自己建立乙個新事物。

@transactional(propagation = propagation.required)

public void test1()

// 宣告方法不需要事務,如果方法沒有關聯到乙個事務,容器不會為它開啟事物。

// 如果方法在乙個事物中被呼叫,該事物會被掛起,在方法呼叫結束後,原先的

// 事物便會恢復執行。

@transactional(propagation = propagation.not_supported)

public void test2()

// 表明不管是否存在事物,業務方法總會為自己發起乙個新事物。

// 如果方法已經執行在乙個事物中,則原有事物會被掛起,

// 新的事物會被建立,直到方法執行結束,新事物才算結束,

// 原先的事務才會被恢復執行。

@transactional(propagation = propagation.requires_new)

public void test3()

// 該屬性指定業務方法只能在乙個已經存在的事物中執行,

// 業務方法不能發起自己的事物,如果業務方法在沒有事物的環境

// 下呼叫,容器就會丟擲異常。

@transactional(propagation = propagation.mandatory)

public void test4()

// 這個事物屬性表明,如果業務方法在某個事務範圍內被呼叫,則方法成為該事物的一部分,

// 如果業務方法在事務範圍外被呼叫,則方法在沒有事物的環境下執行。

@transactional(propagation = propagation.supports)

public void test5()

// 指定業務方法絕對不能在事物範圍內執行。如果業務方法在某個事物中執行,

// 容器會丟擲異常,只有業務方法沒有關聯到任何事物,才能正常執行。

@transactional(propagation = propagation.never)

public void test6()

// 如果乙個活動的事物存在,則執行在乙個巢狀的事物中,如果沒有活動事物,

// 則按required屬性執行,它使用了乙個單獨的事物,這個事物擁有多個回滾的儲存點,

// 內部事務的回滾不會對外事物造成影響,它只對datasourcetransactionmanager

// 事務管理器起效。

@transactional(propagation = propagation.nested)

public void test7()

@transactional(isolation = isolation.default)

public void test8()

// 讀已提交資料(會出現不可重複讀和幻讀)

@transactional(isolation = isolation.read_committed)

public void test9()

// 讀未提交資料(會出現髒讀、不可重複讀和幻讀)

@transactional(isolation = isolation.read_uncommitted)

public void test10()

// 可重複讀(會出現幻讀)

@transactional(isolation = isolation.repeatable_read)

public void test11()

// 序列化

@transactional(isolation = isolation.serializable)

public void test12()

// 丟擲exception異常時,記錄回滾

@transactional(rollbackfor = exception.class)

public void test13() throws exception

// 丟擲exception異常時,記錄不回滾

@transactional(norollbackfor = exception.class)

public void test14() throws exception

其中部分名詞解釋:

髒讀:乙個事物讀取到另乙個事物未提交的更新資料。

不可重複讀:在同一事物中,多次讀取同一資料返回的結果有所不同。換句話說就是,後續讀取可以讀到另一事務已提交的更新資料。

可重複讀:在同一事物中多次讀取資料時,能夠保證所讀資料一樣,也就是,後續讀取不能讀到另一事務已提交的更新資料。

幻讀:乙個事務讀取到另一事務提交的insert資料。

**自<

iteye推薦

spring 中事物的說明

業務方法需要在乙個事物中執行,如果方法執行時,已經存在乙個事物中,那麼加入該事物,否則為自己建立乙個新事物。transactional propagation propagation.required public void test1 宣告方法不需要事務,如果方法沒有關聯到乙個事務,容器不會為它開...

spring事物傳播行為說明

spring在transactiondefinition介面中規定了7種型別的事務傳播行為,規定了事務方法和事務方法發生巢狀呼叫時事務如何進行傳播。種類說明 propagation required 如果當前沒有事務,就新建乙個事務,如果已經存在乙個事務中,加入到這個事務中。這是最常見的選擇。pro...

Spring中的事物管理

1.spring中用硬編碼的方式進行事物管理 在需要應用事物的類中引入 private transactiontemplate transactiontemplate public transactiontemplate gettransactiontemplate public void sett...