1. 程式人生 > >spring 事務的七中傳播行為五中隔離

spring 事務的七中傳播行為五中隔離

eth 事務隔離級別 true 操作 似的 拋出異常 default res pla

事務的傳播行為(七):

public enum Propagation {

	
	REQUIRED(TransactionDefinition.PROPAGATION_REQUIRED),

	
	SUPPORTS(TransactionDefinition.PROPAGATION_SUPPORTS),

	
	MANDATORY(TransactionDefinition.PROPAGATION_MANDATORY),

	
	REQUIRES_NEW(TransactionDefinition.PROPAGATION_REQUIRES_NEW),

	
	NOT_SUPPORTED(TransactionDefinition.PROPAGATION_NOT_SUPPORTED),

	
	NEVER(TransactionDefinition.PROPAGATION_NEVER),

	
	NESTED(TransactionDefinition.PROPAGATION_NESTED);
}

PROPAGATION_REQUIRED

如果當前沒有事務,就新建一個事務,如果已經存在一個事務中,加入到這個事務中。這是最常見的選擇。(有A B 兩個在方法C 裏面調用了方法A和方法B如果A有異常執行失敗,

那麽B方法也不會配執行)

PROPAGATION_SUPPORTS

支持當前事務,如果當前沒有事務,就以非事務方式執行

PROPAGATION_MANDATORY

使用當前的事務,如果當前沒有事務,就拋出異常。

PROPAGATION_REQUIRES_NEW

新建事務,如果當前存在事務,把當前事務掛起。

理解:(方法A 方法B begin trans a method b() end )

PROPAGATION_NOT_SUPPORTED

以非事務方式執行操作,如果當前存在事務,就把當前事務掛起。A方法調用B方法 B不執行事務

PROPAGATION_NEVER

以非事務方式執行,如果當前存在事務,則拋出異常

PROPAGATION_NESTED

如果當前存在事務,則在嵌套事務內執行。如果當前沒有事務,則執行與PROPAGATION_REQUIRED類似的操作。

事務的隔離(五):

DEFAULT 這是一個PlatfromTransactionManager默認的隔離級別,使用數據庫默認的事務隔離級別.
未提交讀(read uncommited) :臟讀,不可重復讀,虛讀都有可能發生
已提交讀 (read commited):避免臟讀。但是不可重復讀和虛讀有可能發生
可重復讀 (repeatable read) :避免臟讀和不可重復讀.但是虛讀有可能發生.
串行化的 (serializable) :避免以上所有讀問題.
Mysql 默認:可重復讀

spring 事務的七中傳播行為五中隔離