@Transactional注解是為方法添加事務(wù)塊的意思,使用aop的技術(shù)動(dòng)態(tài)為方法添加事務(wù)范圍,在使用它時(shí)可以在類(lèi)或者方法上添加,但在類(lèi)上添加時(shí)需要注意一下影響的范圍。
類(lèi)中添加Transactional
相當(dāng)于你的每個(gè)公共的方法都會(huì)被迫加上事務(wù),這并不是一件好事,所以不建議這樣干。
攔截器里調(diào)用的Bean
在http的攔截器里,調(diào)用了一個(gè)類(lèi),這個(gè)類(lèi)是個(gè)bean,而它被添加了Transactional
注解,這相當(dāng)于,你以后的每個(gè)HTTP請(qǐng)求都會(huì)被加上事務(wù),這是很要命的,因?yàn)槟切﹩伪聿僮魇遣恍枰砑邮聞?wù)的。
事物傳播行為介紹
* @Transactional(propagation=Propagation.REQUIRED) :如果有事務(wù), 那么加入事務(wù),
沒(méi)有的話(huà)新建一個(gè)(默認(rèn)情況下)
* @Transactional(propagation=Propagation.NOT_SUPPORTED) :容器不為這個(gè)方法開(kāi)啟事務(wù)
* @Transactional(propagation=Propagation.REQUIRES_NEW)
:不管是否存在事務(wù),都創(chuàng)建一個(gè)新的事務(wù),原來(lái)的掛起,新的執(zhí)行完畢,繼續(xù)執(zhí)行老的事務(wù)
* @Transactional(propagation=Propagation.MANDATORY) :必須在一個(gè)已有的事務(wù)中執(zhí)行,否則拋出異常
* @Transactional(propagation=Propagation.NEVER)
:必須在一個(gè)沒(méi)有的事務(wù)中執(zhí)行,否則拋出異常(與Propagation.MANDATORY相反)
* @Transactional(propagation=Propagation.SUPPORTS)
:如果其他bean調(diào)用這個(gè)方法,在其他bean中聲明事務(wù),那就用事務(wù).如果其他bean沒(méi)有聲明事務(wù),那就不用事務(wù).
事務(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):串行化
完畢,對(duì)bean的事務(wù)塊使用大家要格外注意。
熱門(mén)工具 換一換
