javascript
Spring的事务属性
1、事務(wù)Transactional下的屬性
@Transactional(readOnly = false, // 讀寫事務(wù),只讀事務(wù)timeout = -1, // 事務(wù)的超時時間不限制//noRollbackFor = ArithmeticException.class, // 不回滾 = 條件.classisolation = Isolation.DEFAULT, // 事務(wù)的隔離級別,數(shù)據(jù)庫的默認(rèn)propagation = Propagation.REQUIRED // 事務(wù)的傳播行為 )2、isolation隔離級別
隔離級別:含義
DEFAULT:使用后端數(shù)據(jù)庫默認(rèn)的隔離級別(spring中的的選擇項(xiàng))
READ_UNCOMMITED:允許你讀取還未提交的改變了的數(shù)據(jù)。可能導(dǎo)致臟、幻、不可重復(fù)讀。
READ_COMMITTED:允許在并發(fā)事務(wù)已經(jīng)提交后讀取。可防止臟讀,但是讀和不可重復(fù)讀仍可發(fā)生。
REPEATABLE_READ:對相同字段的多次讀取是一致的,除非數(shù)據(jù)被事務(wù)本身改變。可防止臟、不可重復(fù)讀,但幻讀仍可能發(fā)生。
SERIALIZABLE:完全服從ACID的隔離級別,確保不發(fā)生臟、幻、不可重復(fù)讀。這在所有的隔離級別中是最慢的,它是典型的通過完全鎖定在事務(wù)中涉及的數(shù)據(jù)表來完成的。
3、propagation事物傳播規(guī)則
傳播行為:含義
REQUIRED:業(yè)務(wù)方法需要在一個事務(wù)中運(yùn)行。如果方法運(yùn)行時,已經(jīng)處在一個事務(wù)中,那么加入到該事務(wù),否則為自己創(chuàng)建一個新的事務(wù)。
NOT_SUPPORTED:聲明方法不需要事務(wù)。如果方法沒有關(guān)聯(lián)到一個事務(wù),容器不會為它開啟事務(wù)。如果方法在一個事務(wù)中被調(diào)用,該事務(wù)會被掛起,在方法調(diào)用結(jié)束后,原先的事務(wù)便會恢復(fù)執(zhí)行。
REQUIRES_NEW:屬性表明不管是否存在事務(wù),業(yè)務(wù)方法總會為自己發(fā)起一個新的事務(wù)。如果方法已經(jīng)運(yùn)行在一個事務(wù)中,則原有事務(wù)會被掛起,新的事務(wù)會被創(chuàng)建,直到方法執(zhí)行結(jié)束,新事務(wù)才算結(jié)束,原先的事務(wù)才會恢復(fù)執(zhí)行。
MANDATORY:該屬性指定業(yè)務(wù)方法只能在一個已經(jīng)存在的事務(wù)中執(zhí)行,業(yè)務(wù)方法不能發(fā)起自己的事務(wù)。如果業(yè)務(wù)方法在沒有事務(wù)的環(huán)境下調(diào)用,容器就會拋出例外。
SUPPORTS:這一事務(wù)屬性表明,如果業(yè)務(wù)方法在某個事務(wù)范圍內(nèi)被調(diào)用,則方法成為該事務(wù)的一部分。如果業(yè)務(wù)方法在事務(wù)范圍外被調(diào)用,則方法在沒有事務(wù)的環(huán)境下執(zhí)行
Never:指定業(yè)務(wù)方法絕對不能在事務(wù)范圍內(nèi)執(zhí)行。如果業(yè)務(wù)方法在某個事務(wù)中執(zhí)行,容器會拋出例外,只有業(yè)務(wù)方法沒有關(guān)聯(lián)到任何事務(wù),才能正常執(zhí)行。
NESTED:如果一個活動的事務(wù)存在,則運(yùn)行在一個嵌套的事務(wù)中. 如果沒有活動事務(wù), 則按REQUIRED屬性執(zhí)行.它使用了一個單獨(dú)的事務(wù), 這個事務(wù)擁有多個可以回滾的保存點(diǎn)。內(nèi)部事務(wù)的回滾不會對外部事務(wù)造成影響。它只對DataSourceTransactionManager事務(wù)管理器起效。
轉(zhuǎn)載于:https://www.cnblogs.com/imzhuo/p/5889935.html
總結(jié)
以上是生活随笔為你收集整理的Spring的事务属性的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: CentOS7 SSH相关
- 下一篇: 怪自己,好好的服务器,装啥播放器。。。