精品欧美一区二区三区在线观看 _久久久久国色av免费观看性色_国产精品久久在线观看_亚洲第一综合网站_91精品又粗又猛又爽_小泽玛利亚一区二区免费_91亚洲精品国偷拍自产在线观看 _久久精品视频在线播放_美女精品久久久_欧美日韩国产成人在线

事務篇:Spring事務的坑,你都踩過嗎?

數據庫 其他數據庫
日常中最容易出現事務失效或者不能按照預期執行的情況,大致分為四類:自身調用、異常被吃、異常拋出類型不對以及事務的傳播機制不熟悉。

本篇,我們將要從本人以及同事在工作中踩過的關于事務的坑,以及踩坑之后自己在發現的使用 Spring 事務存在的坑展示給大家,讓大家也避免踩坑

一、來看看這些事務之坑

總得來說呢,經常遇到的其實是這四類:自身調用、異常被吃、異常拋出類型不對以及事務的傳播機制不熟悉

具體例子,我們來看看:

1.數據庫引擎不支持事務

感覺這種一般估計不太會出現。畢竟你要使用事務,肯定會在最開始就選擇支持事務的數據庫引擎咯

比如常用的 oracle 直接就是支持事務的,而 mysql 的 innodb 支持事務,myIsam 的話,是不支持事務的

在 mysql5.1 版本之前,默認引擎是 myIsam ,而之后的版本則默認就是innodb 了~

建議檢查項:mysql的數據庫引擎。

執行命令:

show variables like '%storage_engine%';

我們看到,我本地的 5.7 版本 的 mysql 數據庫的數據庫引擎默認就是 innodb

2.方法不是 public 的

其實經過本人的測試,除了 private 方法本身就不能編譯通過以外,public、protected 以及 default 三個修飾符都是支持事務的

有興趣,你也可以測試一下!

3.自身調用問題

比如在同一個類中的兩個方法 methodA 和 methodB 。methodA 沒有設置事務,methodB 設置了事務,methodA 調用 methodB 時,事務便會失效

1) 同一個類中的方法調用

/**
* 自調用測試:事務失效,表中新增了兩條數據:id為10和11的數據
*/
@Override
public void testInvokeBInOneClass(){
User user = User.builder().id(10).name("王二").age(22).build();
userDao.addUser(user);
testB();
}

@Transactional
public void testB(){
User user = User.builder().id(11).name("張三").age(22).build();
userDao.addUser(user);
int i = 1/0;
}

我們預測一下:

若事務失效,數據庫中將會成功增加兩條數據:王二和張三

若事務生效,則表中將不會增加任何數據

執行該方法后,我們會發現,數據庫的 t_user2 表中的記錄為:

沒錯,結果,事務失效了

2)不同類中的方法調用

我們把 testB () 方法放到另一個類 TransactionBImpl 中

此時,調用 TransactionBImpl 類中的 testB () 方法;

/**
* 自調用測試:事務生效,表中新增了一條數據:id為10的數據
*/
@Override
public void testInvokeBInTwoClass(){
User user = User.builder().id(10).name("王二").age(22).build();
userDao.addUser(user);
transactionB.testB();
}

發現數據庫中的數據為:

說明事務生效了,為什么呢?

因為外層 testInvokeBInTwoClass() 方法本身是沒有事務(沒有加事務注解)的,它調用了另一個類中 加了事務注解的 testB() 方法,不要忘記 @Transactional 注解的默認傳播機制,是PROPAGATION_REQUIRED - 若不存在事務,就要自己創建一個新事務

也就是說,最終的效果就是,testB() 方法內部在一個事務內,testInvokeBInTwoClass()方法中,并沒有事務(不會因為異常而觸發回滾操作)

那么,最終的結果,也就輕易理解咯~

如果你聽過獨立事務的話,就能想到它的實現機制了吧!

Tips

有些業務需要,要求 methodA 調用 methodB 時,并不會因為 methodB 的執行失敗,而影響了調用之前的操作。如在在表中調用之前登記了一條狀態日志,此時并不想要因為調用失敗,而回滾了這條記錄,就可以這樣操作啦~

小結

事務在發生自調用時,若調用方沒有加 @Transactional 注解,事務便會失效

若要使事務生效,則可以考慮將該被調用的方法放在另一個類中即可

4.不支持事務

這種情況比較容易理解,只是會在編碼過程中容易被忽略掉,所以在這里也提一下

當 methodA 調用另一個類中的 methodB ,若 methodB 設置了事務的傳播機制為Propagation.NOT_SUPPORTED

那么,即使 methodA 開啟了事務,也不一定會按照自己的預期來發展的,來看看下面這個例子:

UserServiceImpl 類

 @Override
public void testNotSupported() {
User user = User.builder().id(10).name("王二").age(22).build();
userDao.addUser(user);
transactionB.testNotSupported();
}

TransactionBImpl 類

@Transactional
(propagation = Propagation.NOT_SUPPORTED)
@Override
public void testNotSupported(){
User user = User.builder().id(11).name("張三").age(22).build();
userDao.addUser(user);
int i = 1/0;
}

即,UserServiceImpl 類中的 testNotSupported()方法調用了 TransactionBImpl 類 中的 testNotSupported()方法

我們來分析一下,按照調用方是否開啟事務,可以分為以下兩種情況 :

1)若調用方 testNotSupported()方法不加 @Transactional 注解,則表中數據為:

顯而易見,說明兩個方法統一都沒有事務

若加上,則只插入了一條數據

說明外部方法還是存在事務的,只要出現異常就會回滾。而被調用方 transactionB.testNotSupported() 的方法內部不支持事務,于是該方法出錯之后也不會出現事務回滾,因此出錯之前的插表操作就沒有回滾

5.異常被catch住了,沒有拋出來

由于事務默認回滾的是:RuntimeException 和 Error 兩種情況,所以以下兩種情況都會失效

1)異常被吃了,事務失效

/**
* 7、異常被吃了:try掉異常(未拋出),事務失效
*/
@Transactional
@Override
public void testException(){
try {
User user = User.builder().id(10).name("王二").age(22).build();
userDao.addUser(user);
int i = 1/0;
}catch (Exception e) {
System.out.println("執行失敗:"+e.getMessage());
// throw new RuntimeException("執行失敗,拋出異常:"+e.getMessage());
}
}

也就是說,異常并沒有被拋出來,而是通過 catch 住,然后做了一些其他的邏輯處理,這種事務是不會生效的

再來看看第二種情況

2)拋出Exception異常,事務失效

@Transactional
@Override
public void testException() throws Exception {
try {
User user = User.builder().id(10).name("王二").age(22).build();
userDao.addUser(user);
int i = 1/0;
}catch (Exception e) {
System.out.println("執行失敗:"+e.getMessage());
throw new Exception("拋出了Exception異常:"+e.getMessage());
// throw new RuntimeException("執行失敗,拋出異常:"+e.getMessage());
}
}

回想一下我們的大前提:Spring事務默認回滾的是:RuntimeException和Error兩種情況。現在拋出了 Excption ,就不會觸發事務的回滾,所以這樣事務也是不生效的

要怎樣才能讓這樣的事務生效呢?

改成拋出 RuntimeException 事務就生效啦~ 你完全可以現在就試試

對了,如果你想觸發其他異常的回滾,包括你自己定義的異常或者 Exception 異常的話,也不是沒有辦法。只需要在方法的注解上配置一下 rollbackFor 屬性即可,如:@Transactional(rollbackFor = Exception.class)。

留一個思考題給你:若配置了其他異常,那原本的規則是否被覆蓋掉?

小結

只要抓住一點:事務默認在:RuntimeException 和 Error 兩種情況下執行回滾操作

因此,

1)異常被捕獲掉,沒有拋出來,就不會生效

2)拋出的 RuntimeException 異常或者未遇到 Error ,事務默認也不會生效的

那么,怎么處理才能讓事務生效,想必已經很明顯了吧?

6.未啟用spring事務管理功能

@EnableTransactionManagement 注解用來啟用spring事務自動管理事務的功能,只有有這個注解,這個注解千萬不要忘記寫了

但是當引入了;

spring-boot-starter-jdbc

就可以不用我們自己寫,為什么呢?我們來看看;

@EnableTransactionManagement 這個注解開啟事務,其實和我們自己使用@EnableTransactionManagement是一樣的 因此,只要我們在 SpringBoot 中引入了 spring-boot-starter-jdbc 這個依賴以后,我們就只需要使用 @Transactional 就可以了。

二、總而言之

好了,本篇文章,接著上一篇的事務基礎,為大家演示了幾個開發過程中容易出現的事務失效,或者事務不能按照自己的預期來執行的幾種場景。

總結一下,日常中最容易出現事務失效或者不能按照預期執行的情況,大致分為四類:自身調用、異常被吃、異常拋出類型不對以及事務的傳播機制不熟悉。

那么我們需要如何去避免踩坑,正確高效地使用事務呢?

很簡單,只需要關注單個方法時事務的回滾機制,以及涉及到兩個以及兩個以上方法的調用時事務的傳播機制以及Spring事務的原理。

  • 單個方法的調用,事務只會在執行過程中出現 RuntimeException 和 Error 以及事務超時時進行事務的回滾;
  • 多個方法:當在同一個類中進行方法調用時,若要事務不失效,則需要在調用方的方法都加上事務注解,同時需要關注事務的傳播機制以及各層方法的事務回滾情況;

不在同一類中時,則需要根據特定的業務場景,選擇不同的傳播機制。

責任編輯:武曉燕 來源: 今日頭條
相關推薦

2025-02-10 00:27:54

2024-04-01 08:05:27

Go開發Java

2023-03-13 13:36:00

Go擴容切片

2019-09-25 15:30:15

2025-05-27 08:45:00

2019-10-30 14:44:41

Prometheus開源監控系統

2018-09-11 09:14:52

面試公司缺點

2025-04-29 10:17:42

2025-10-15 02:45:00

系統分表接口

2017-07-17 15:46:20

Oracle并行機制

2023-08-29 10:51:44

2023-09-08 08:52:12

Spring注解事務

2025-07-08 09:09:32

MySQL類型

2022-07-06 11:47:27

JAVAfor循環

2025-04-14 09:31:03

2025-08-26 01:20:00

2019-12-12 14:32:26

SQL語句數據庫

2025-06-03 06:30:05

2025-02-06 07:45:44

2018-01-10 13:40:03

數據庫MySQL表設計
點贊
收藏

51CTO技術棧公眾號

九九久久精品| av亚洲在线| 久久福利一区| 最新国产成人av网站网址麻豆| 天天操,天天操| 人人澡人人添人人爽一区二区| 91一区二区三区在线观看| 国产精品精品久久久久久| 永久久久久久久| 亚洲精品3区| 欧美一区二区三区婷婷月色| 欧美黑人经典片免费观看| 亚洲乱亚洲乱妇| 99久久久免费精品国产一区二区| 国产精品男人的天堂| 国产精品成人国产乱| 成人在线免费观看91| 日韩av中文字幕在线| 污污视频网站在线| 性欧美hd调教| 亚洲成人精品影院| 欧美爱爱视频网站| 国产一区二区三区福利| 成人aaaa免费全部观看| 91色在线视频| 黄色一区二区视频| 久久国产精品久久w女人spa| 欧美国产日韩视频| 午夜精品一区二区三级视频| 久久av导航| 亚洲高清福利视频| 丰满人妻一区二区三区53视频| 深夜视频一区二区| 欧美三级xxx| 国产原创popny丨九色| 日本高清成人vr专区| 亚洲欧洲精品一区二区三区| 日韩免费av一区二区三区| 手机av免费在线观看| 国产福利一区在线| 91精品啪在线观看麻豆免费| 国产一级片免费在线观看| 9国产精品视频| 久久久久久18| 国产盗摄x88av| 亚洲九九视频| 久久影视电视剧免费网站清宫辞电视| 日本理论中文字幕| 精品一区二区三区在线| 亚洲欧美在线一区| 国产精品1000部啪视频| 露出调教综合另类| 日韩高清人体午夜| 一区二区三区少妇| 亚洲人成精品久久久 | 另类春色校园亚洲| 精品国产伦一区二区三区观看方式| 国内精品国产三级国产aⅴ久| 99久久久成人国产精品| 91精品麻豆日日躁夜夜躁| 欧洲美女亚洲激情| 精品91福利视频| 日韩精品中午字幕| 亚洲国产精品成人综合久久久| 成人搞黄视频| 亚洲精品资源美女情侣酒店 | 欧美人妖视频| 精品无人区乱码1区2区3区在线| 国产精品久久久免费观看| 欧美1区2区3区4区| 夜夜嗨av一区二区三区免费区| 国产一二三四区在线| 久久精品国产68国产精品亚洲| 精品久久久91| 久久网中文字幕| 免费日韩视频| 国产日产欧美精品| 精品人妻无码一区二区| 99久久久精品| 亚洲精品tv久久久久久久久| 黄色免费在线看| 亚洲国产精品欧美一二99| 亚洲国产精品久久久久婷蜜芽| 日韩三区免费| 91麻豆精品国产91久久久| fc2成人免费视频| 精品美女视频| 欧美美最猛性xxxxxx| 国产精品免费av一区二区| 日韩经典中文字幕一区| 91九色偷拍| 你懂的在线观看| 日韩理论片中文av| 久久久久久久午夜| 亚洲欧美在线人成swag| 亚洲成人在线视频播放| 99精品全国免费观看| 亚洲午夜黄色| 国产日本欧美一区二区三区在线| 免费看黄网站在线观看| 亚洲国产成人午夜在线一区| www污在线观看| 欧美大片网站| 日韩精品在线免费播放| 成人免费视频网站入口::| 免费在线成人| 岛国视频一区免费观看| 瑟瑟视频在线| 欧美性猛xxx| 无码人妻丰满熟妇区毛片蜜桃精品| 天海翼亚洲一区二区三区| 毛片精品免费在线观看| 青青艹在线观看| 9久草视频在线视频精品| 亚洲区成人777777精品| 亚洲mmav| 日韩精品在线免费| 国产一级做a爱免费视频| 蜜臀久久99精品久久久久宅男| 国产一区二区三区黄| 中文字幕免费高清电视剧网站在线观看| 日韩欧美亚洲范冰冰与中字| 极品白嫩的小少妇| 91成人网在线观看| 国产精品一香蕉国产线看观看| 性xxxx视频| 亚洲妇女屁股眼交7| 在线免费黄色小视频| 手机在线电影一区| 国产精品高潮呻吟久久av无限 | 日本一二三不卡| 成人在线免费在线观看| 99a精品视频在线观看| 久热爱精品视频线路一| 艳妇乳肉豪妇荡乳av| 国产日韩欧美精品电影三级在线| 精品国产免费av| 国产精品网站在线看| 久久久噜噜噜久久| 亚洲国产精品久久久久久6q| 亚洲美女屁股眼交| 中文字幕在线视频精品| 国产精品久久久乱弄| 国产欧美 在线欧美| p色视频免费在线观看| 欧美最猛性xxxxx直播| 亚洲精品成人无码| 日韩成人精品在线观看| 日韩欧美一区二区在线观看| 日韩免费小视频| 国产一区二区三区视频免费| 日本成人一级片| 国产精品三级av| 日本中文字幕二区| 亚洲成人二区| aaa级精品久久久国产片| bt在线麻豆视频| 日韩三级高清在线| 国产精品a成v人在线播放| 99久久99久久精品国产片果冻| 免费无码不卡视频在线观看| 久久99国内| 国产精品偷伦一区二区| 激情影院在线观看| 欧美成人伊人久久综合网| 久久久久久久伊人| 久久蜜桃av一区二区天堂 | 国产激情91久久精品导航| 欧美一级中文字幕| 国产精品香蕉| 国产精品久久9| 黄网站在线播放| 亚洲的天堂在线中文字幕| 欧美日韩乱国产| 国产精品免费人成网站| 无码人妻丰满熟妇啪啪网站| 91久久午夜| 日韩免费毛片| 97久久亚洲| 日本高清久久天堂| 免费在线观看黄色| 亚洲电影av在线| 免费无码国产精品| 亚洲美女精品一区| 日韩人妻一区二区三区 | 一起草在线视频| 强制捆绑调教一区二区| 一本色道久久88亚洲精品综合| 久久a爱视频| 国产精品丝袜高跟| 阿v视频在线| 色yeye香蕉凹凸一区二区av| 亚洲不卡免费视频| 在线看一区二区| 免费视频一二三区| 欧美国产精品中文字幕| 国产成人精品一区二区三区在线观看| 国产精品久久久久久久免费软件 | 欧美日韩精品免费| xxxxxx国产| 中文字幕色av一区二区三区| 精品国产av色一区二区深夜久久| 久久精品国产久精国产爱| 免费观看美女裸体网站| 久久久久久久久久久9不雅视频| 久久精品magnetxturnbtih| 99精品在线免费观看| 日本精品视频网站| 黄色的视频在线观看| 少妇高潮久久77777| 少妇性bbb搡bbb爽爽爽欧美| 91精品欧美综合在线观看最新| 99久久精品国产亚洲| 一区二区三区日本| 蜜桃av免费观看| 久久久高清一区二区三区| 18禁一区二区三区| 久久91精品久久久久久秒播| 999香蕉视频| 亚洲精品日韩久久| 999久久欧美人妻一区二区| 99精品综合| 性欧美videosex高清少妇| 日韩人体视频| 国产精品一区二区免费看| 精品国产亚洲一区二区三区在线 | 夜夜嗨av一区二区三区中文字幕| 美国美女黄色片| 久久久99精品免费观看| 超碰97人人干| 99re这里只有精品首页| 国产亚洲精品成人a| 国产麻豆视频精品| 手机在线国产视频| 久久99国产精品尤物| 国产精品视频分类| 蜜臀久久99精品久久久久宅男| 国产女女做受ⅹxx高潮| 国产视频一区三区| 欧美日本视频在线观看| 99人久久精品视频最新地址| aa视频在线播放| 亚洲黄色在线| 成人av一级片| 久久黄色影院| 蜜臀久久99精品久久久酒店新书| 久久狠狠婷婷| av五月天在线| 理论电影国产精品| 捷克做爰xxxⅹ性视频| 激情伊人五月天久久综合| 手机在线观看日韩av| 国产传媒日韩欧美成人| 95视频在线观看| 99久久精品费精品国产一区二区| 97香蕉碰碰人妻国产欧美 | 国产精品免费人成网站酒店| 亚洲欧洲韩国日本视频| 天天干中文字幕| 黄色成人在线免费| 中文字幕黄色片| 91国内精品野花午夜精品| 中文字幕一区二区三区人妻四季 | 国产精品91在线| 欧美97人人模人人爽人人喊视频| 成人写真视频福利网| caoporn成人| 裸模一区二区三区免费| 精品黄色一级片| 蜜臀av.com| 亚洲黄色成人| 亚洲成人福利在线观看| 国产在线视频一区二区三区| 又大又长粗又爽又黄少妇视频| 99久久免费视频.com| 日韩精品电影一区二区三区| 亚洲精品视频自拍| 欧美日韩综合在线观看| 日本电影亚洲天堂一区| 一女二男一黄一片| 欧美精品一区二区三区蜜桃视频| 欧美日韩国产亚洲沙发| 久久激情五月丁香伊人| aa国产成人| 国产精品一区二区三区久久久| 日本免费精品| 免费在线国产精品| 亚洲一区二区日韩| 欧美性大战久久久久xxx| 精品无人码麻豆乱码1区2区| 性欧美丰满熟妇xxxx性久久久| 国产精品青草久久| 日本系列第一页| 欧美日本高清视频在线观看| 五月婷婷综合久久| 米奇精品一区二区三区在线观看| 黑森林国产精品av| 91免费欧美精品| 欧美男gay| 日韩av中文字幕第一页| 蜜臀av性久久久久蜜臀aⅴ四虎| 超碰人人cao| 中文字幕高清一区| 91porny在线| 日韩欧美国产精品| 337p日本欧洲亚洲大胆鲁鲁| 91精品国产91久久久久| 精品一区二区三区四区五区| 欧美久久久久久久| 欧美视频不卡| 中文字幕66页| 久久精品在这里| 亚洲 欧美 视频| 欧美成人女星排行榜| 欧美jizzhd69巨大| 国产99久久精品一区二区永久免费 | 男男做爰猛烈叫床爽爽小说 | www.一区二区| 欧美黑人性猛交xxx| 欧美丝袜第三区| 日本天堂影院在线视频| 久久久噜噜噜久久中文字免| 秋霞午夜一区二区三区视频| 亚洲国产欧美一区二区三区不卡| 亚洲欧美成人| 欧产日产国产精品98| 亚洲一区在线看| 精品女同一区二区三区| 久久九九亚洲综合| 台湾天天综合人成在线| 午夜老司机精品| 日韩av网站在线观看| 亚洲精品午夜视频| 欧美性极品xxxx做受| 性xxxxbbbb| 欧美最顶级丰满的aⅴ艳星| 精品亚洲自拍| www在线观看免费| av动漫一区二区| 日本最新中文字幕| 亚洲国产日韩欧美综合久久| 第一av在线| 精品伦理一区二区三区| 日韩一级免费| 蜜桃精品成人影片| 色网站国产精品| 日本福利在线观看| 国产成人精品a视频一区www| 国产欧美日韩在线观看视频| 中文字幕无码不卡免费视频| 国产色综合久久| 中文字幕在线观看第二页| 深夜精品寂寞黄网站在线观看| av免费在线一区| 中文精品视频一区二区在线观看| 久久99精品国产91久久来源| 福利所第一导航| 亚洲第一福利在线观看| 亚洲少妇视频| 水蜜桃一区二区三区| 麻豆精品国产91久久久久久| 成人免费黄色小视频| 日韩精品一区国产麻豆| sqte在线播放| 欧美一区1区三区3区公司| 免费久久99精品国产| 精品无码一区二区三区蜜臀| 日韩三级电影网址| 亚洲精品成人图区| 亚洲一区bb| 国产不卡高清在线观看视频| 99视频在线看| 夜夜嗨av一区二区三区四区 | 欧美下载看逼逼| 久久精品国产精品亚洲精品| 久久一二三四区| 亚洲欧洲成视频免费观看| 台湾天天综合人成在线| 久久国产午夜精品理论片最新版本| 91丨九色丨尤物| 国产有码在线观看| 97人人做人人爱| 欧美大片aaaa| 天天插天天射天天干| 欧美精品一卡二卡| 热色播在线视频| 一区二区三区国| 97久久超碰国产精品| 一级片一区二区三区| 亚州国产精品久久久| 999精品色在线播放| 精品中文字幕在线播放| 欧美精品精品一区| 日本黄色免费在线| 成年人黄色在线观看| 91视频观看视频| 国产av无码专区亚洲a∨毛片| 欧美一区二区影院| 一区二区三区午夜视频| 第一次破处视频|