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