@Transcational特性
- 捕獲RuntimeException
- 捕獲Error
- 并不捕獲Checked Exception
在方法中使用@Transcational注解時(shí)候,通過throw new Exception(),在發(fā)生異常的時(shí)候不會(huì)進(jìn)行回滾,可以使用throw new RuntimeException();
也可以使用@Transactional(rollbackForClassName="Exception")來設(shè)置回滾觸發(fā)的異常類型。
事物傳播行為介紹:?
@Transactional(propagation=Propagation.REQUIRED) :如果有事務(wù), 那么加入事務(wù), 沒有的話新建一個(gè)(默認(rèn)情況下)
@Transactional(propagation=Propagation.NOT_SUPPORTED) :容器不為這個(gè)方法開啟事務(wù)
@Transactional(propagation=Propagation.REQUIRES_NEW) :不管是否存在事務(wù),都創(chuàng)建一個(gè)新的事務(wù),原來的掛起,新的執(zhí)行完畢,繼續(xù)執(zhí)行老的事務(wù)
@Transactional(propagation=Propagation.MANDATORY) :必須在一個(gè)已有的事務(wù)中執(zhí)行,否則拋出異常
@Transactional(propagation=Propagation.NEVER) :必須在一個(gè)沒有的事務(wù)中執(zhí)行,否則拋出異常(與Propagation.MANDATORY相反)
@Transactional(propagation=Propagation.SUPPORTS) :如果其他bean調(diào)用這個(gè)方法,在其他bean中聲明事務(wù),那就用事務(wù).如果其他bean沒有聲明事務(wù),那就不用事務(wù).
?
事物超時(shí)設(shè)置:
@Transactional(timeout=30) //默認(rèn)是30秒
?
事務(wù)隔離級(jí)別:
@Transactional(isolation = Isolation.READ_UNCOMMITTED):讀取未提交數(shù)據(jù)(會(huì)出現(xiàn)臟讀, 不可重復(fù)讀) 基本不使用
@Transactional(isolation = Isolation.READ_COMMITTED):讀取已提交數(shù)據(jù)(會(huì)出現(xiàn)不可重復(fù)讀和幻讀)
@Transactional(isolation = Isolation.REPEATABLE_READ):可重復(fù)讀(會(huì)出現(xiàn)幻讀)
@Transactional(isolation = Isolation.SERIALIZABLE):串行化
MYSQL: 默認(rèn)為REPEATABLE_READ級(jí)別
SQLSERVER: 默認(rèn)為READ_COMMITTED
臟讀?: 一個(gè)事務(wù)讀取到另一事務(wù)未提交的更新數(shù)據(jù)
不可重復(fù)讀?: 在同一事務(wù)中, 多次讀取同一數(shù)據(jù)返回的結(jié)果有所不同, 換句話說,?
后續(xù)讀取可以讀到另一事務(wù)已提交的更新數(shù)據(jù). 相反, "可重復(fù)讀"在同一事務(wù)中多次
讀取數(shù)據(jù)時(shí), 能夠保證所讀數(shù)據(jù)一樣, 也就是后續(xù)讀取不能讀到另一事務(wù)已提交的更新數(shù)據(jù)
幻讀?: 一個(gè)事務(wù)讀到另一個(gè)事務(wù)已提交的insert數(shù)據(jù)
?
轉(zhuǎn)載于:https://www.cnblogs.com/huangzhang/p/10732012.html
總結(jié)
以上是生活随笔為你收集整理的@Transcational特性的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: C: City----逆向并查集
- 下一篇: LOJ.6435.[PKUSC2018]