摘要:否則事務(wù)不起作用。第二種情況同一個(gè)類中方法嵌套方法方法有,方法內(nèi)都沒有,事務(wù)起作用??偨Y(jié)要想事務(wù)起作用,必須是主方法名上有注解,方法體內(nèi)不能用如果用,則中必須用注解應(yīng)該只被應(yīng)用到方法上,不要用在等方法上,即使用了也將被忽略,不起作用。
代碼方法示例
@Transactional public void saveAA() { ????try { ????//方法A第一次更新數(shù)據(jù) mapper.save(); //調(diào)用方法B更新數(shù)據(jù) this.saveBB(); ????} catch (Exception e) { throw new RuntimeException(); ???? } } @Transactional public void saveBB(){ try { //方法B第一次更新數(shù)據(jù) mapper.save(); int i = 100/0; //方法B第二次更新數(shù)據(jù) mapper.save(); } catch (Exception e) { //e.printStackTrace(); throw new RuntimeException(); } }
說明:
?
讓事務(wù)起作用,遇到錯(cuò)誤進(jìn)行回滾,應(yīng)該注意的事項(xiàng):
第一種情況:同一個(gè)類中 一個(gè)方法無嵌套方法
?1、如果方法名上加上@Transactional注解,方法內(nèi)不要用try catch ;如果必須要用try catch ,則catch中必須用throw new RuntimeException()。否則事務(wù)不起作用。
第二種情況:同一個(gè)類中 方法A嵌套方法B
1、方法A有@Transactional,方法內(nèi)都沒有try catch,事務(wù)起作用。
2、方法A有@Transactional和try catch,并且catch中用throw new RuntimeException(),事務(wù)起作用。
第三種情況:不同類中,方法C嵌套方法B
1、方法B上加上@Transactional注解,方法內(nèi)不要用try catch ;如果必須要用try catch ,則catch中必須用throw new RuntimeException()。否則方法B的事務(wù)不起作用。
2、方法C上加上@Transactional注解,方法內(nèi)不要用try catch ;如果必須要用try catch ,則catch中必須用throw new RuntimeException(),此時(shí)方法B怎么寫都行。否則方法C的事務(wù)不起作用。
?
總結(jié)1、要想事務(wù)起作用,必須是主方法名上有@Transactional注解,方法體內(nèi)不能用try catch;如果用try catch,則catch中必須用throw new RuntimeException();
2、@Transactional注解應(yīng)該只被應(yīng)用到public方法上,不要用在protected、private等方法上,即使用了也將被忽略,不起作用。這是由Spring AOP決定的。
3、只有來自外部的方法調(diào)用才會(huì)唄AOP代理捕捉,類內(nèi)部方法調(diào)用類內(nèi)部的其他方法,子方法并會(huì)不引起事務(wù)行為,即使被調(diào)用的方法上使用有@Transactional注解。
4、類內(nèi)部方法調(diào)用內(nèi)部的其他方法,被調(diào)用的方法體中如果有try catch,則catch中必須用throw new RuntimeException(),否則即使主方法上加上@Transactional注解,如果被調(diào)用的子方法出錯(cuò)也不會(huì)拋出異常,不會(huì)引起事務(wù)起作用。
文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請注明本文地址:http://www.ezyhdfw.cn/yun/74166.html
摘要:使用需要使用作為事務(wù)管理器。兩個(gè)事務(wù)互不影響。這是默認(rèn)的隔離級(jí)別,使用數(shù)據(jù)庫默認(rèn)的事務(wù)隔離級(jí)別下邊的四個(gè)與的隔離級(jí)別相對(duì)應(yīng)這是事務(wù)最低的隔離級(jí)別,它充許另外一個(gè)事務(wù)可以看到這個(gè)事務(wù)未提交的數(shù)據(jù)。這種事務(wù)隔離級(jí)別可 Spring事務(wù)整理 工作了幾年了,今天抽時(shí)間整理一下spring的事務(wù),說起spring的事務(wù)是面試的時(shí)候面試官經(jīng)常提及的問題,接下來結(jié)合網(wǎng)上資料再總結(jié)下spring的事務(wù)...
摘要:事務(wù)隔離級(jí)別定義了一個(gè)事務(wù)可能受其他并發(fā)事務(wù)影響的程度我們先來看一下并發(fā)事務(wù)帶來的問題,然后再來介紹一下接口中定義了五個(gè)表示隔離級(jí)別的常量。 Java面試通關(guān)手冊(Java學(xué)習(xí)指南):https://github.com/Snailclimb/Java_Guide 微信閱讀地址鏈接:可能是最漂亮的Spring事務(wù)管理詳解 事務(wù)概念回顧 什么是事務(wù)? 事務(wù)是邏輯上的一組操作,要么都執(zhí)行,...
摘要:事務(wù)嵌套影響首先經(jīng)過實(shí)驗(yàn),結(jié)論一仍然成立,即,當(dāng)不加上的時(shí)候,無論內(nèi)外報(bào),都會(huì)回滾無論內(nèi)外報(bào)非錯(cuò)誤,都不會(huì)回滾。結(jié)論結(jié)論一對(duì)于可以保證錯(cuò)誤的回滾,如果想保證非錯(cuò)誤的回滾,需要加上參數(shù)。 Spring 事務(wù)注解 @Transactional 本來可以保證原子性,如果事務(wù)內(nèi)有報(bào)錯(cuò)的話,整個(gè)事務(wù)可以保證回滾,但是加上try catch或者事務(wù)嵌套,可能會(huì)導(dǎo)致事務(wù)回滾失敗。測試一波。 準(zhǔn)備 建...
摘要:但是這將嚴(yán)重影響程序的性能。垂直分區(qū)的優(yōu)點(diǎn)在于可以使得行數(shù)據(jù)變小,在查詢時(shí)減少讀取的數(shù),減少次數(shù)。此外,垂直分區(qū)可以簡化表的結(jié)構(gòu),易于維護(hù)。垂直分區(qū)的缺點(diǎn)在于主鍵會(huì)出現(xiàn)冗余,需要管理冗余列,并會(huì)引起操作,可以通過在應(yīng)用層進(jìn)行來解決。 Java面試通關(guān)手冊(Java學(xué)習(xí)指南,歡迎Star,會(huì)一直完善下去,歡迎建議和指導(dǎo)):https://github.com/Snailclimb/Jav...
閱讀 2163·2021-11-24 09:39
閱讀 1654·2021-10-11 10:59
閱讀 2574·2021-09-24 10:28
閱讀 3458·2021-09-08 09:45
閱讀 1342·2021-09-07 10:06
閱讀 1747·2019-08-30 15:53
閱讀 2142·2019-08-30 15:53
閱讀 1476·2019-08-30 15:53