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