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

面試突擊:什么情況會導(dǎo)致@Transactional事務(wù)失效?

開發(fā) 前端
@Transactional 會在方法執(zhí)行前,會自動開啟事務(wù);在方法成功執(zhí)行完,會自動提交事務(wù);如果方法在執(zhí)行期間,出現(xiàn)了異常,那么它會自動回滾事務(wù)。

一個程序中不可能沒有事務(wù),而 Spring 中,事務(wù)的實現(xiàn)方式分為兩種:編程式事務(wù)和聲明式事務(wù),又因為編程式事務(wù)實現(xiàn)相對麻煩,而聲明式事務(wù)實現(xiàn)極其簡單,所以在日常項目中,我們都會使用聲明式事務(wù) @Transactional 來實現(xiàn)事務(wù)。

@Transactional 使用極其簡單,只需要在類上或方法上添加 @Transactional 關(guān)鍵字,就可以實現(xiàn)事務(wù)的自動開啟、提交或回滾了,它的基礎(chǔ)用法如下:

@Transactional 
@RequestMapping("/add")
public int add(UserInfo userInfo) {
int result = userService.add(userInfo);
return result;
}

@Transactional 執(zhí)行流程

@Transactional 會在方法執(zhí)行前,會自動開啟事務(wù);在方法成功執(zhí)行完,會自動提交事務(wù);如果方法在執(zhí)行期間,出現(xiàn)了異常,那么它會自動回滾事務(wù)。

然而,就是看起來極其簡單的 @Transactional,卻隱藏著一些“坑”,這些坑就是我們今天要講的主題:導(dǎo)致 @Transactional 事務(wù)失效的常見場景有哪些?

在開始之前,我們先要明確一個定義,什么叫做“失效”?

本文中的“失效”指的是“失去(它的)功效”,也就是當(dāng) @Transactional 不符合我們預(yù)期的結(jié)果時,我們就可以說 @Transactional 失效了。

那 @Transactional 失效的場景有哪些呢?接下來我們一一來看。

1.非 public 修飾的方法

當(dāng) @Transactional 修飾的方法為非 public 時,事務(wù)就失效了,比如以下代碼當(dāng)遇到異常之后,不能自動實現(xiàn)回滾:

@RequestMapping("/save")
int save(UserInfo userInfo) {
// 非空效驗
if (userInfo == null ||
!StringUtils.hasLength(userInfo.getUsername()) ||
!StringUtils.hasLength(userInfo.getPassword()))
return 0;
// 執(zhí)行添加操作
int result = userService.save(userInfo);
System.out.println("add 受影響的行數(shù):" + result);
int num = 10 / 0; // 此處設(shè)置一個異常
return result;
}

以上程序的運行結(jié)果如下:

當(dāng)程序出現(xiàn)運行時異常時,我們預(yù)期的結(jié)果是事務(wù)應(yīng)該實現(xiàn)自動回滾,也就是添加用戶失敗,然而當(dāng)我們查詢數(shù)據(jù)庫時,卻發(fā)現(xiàn)事務(wù)并未執(zhí)行回滾操作,數(shù)據(jù)庫的數(shù)據(jù)如下圖所示:

2.timeout 超時

當(dāng)在 @Transactional 上,設(shè)置了一個較小的超時時間時,如果方法本身的執(zhí)行時間超過了設(shè)置的 timeout 超時時間,那么就會導(dǎo)致本來應(yīng)該正常插入數(shù)據(jù)的方法執(zhí)行失敗,示例代碼如下:

@Transactional(timeout = 3) // 超時時間為 3s
@RequestMapping("/save")
int save(UserInfo userInfo) throws InterruptedException {
// 非空效驗
if (userInfo == null ||
!StringUtils.hasLength(userInfo.getUsername()) ||
!StringUtils.hasLength(userInfo.getPassword()))
return 0;
int result = userService.save(userInfo);
return result;
}

UserService 的 save 方法實現(xiàn)如下:

public int save(UserInfo userInfo) throws InterruptedException {
// 休眠 5s
TimeUnit.SECONDS.sleep(5);
int result = userMapper.add(userInfo);
return result;
}

以上程序的運行結(jié)果如下:

數(shù)據(jù)庫沒有正確的插入數(shù)據(jù),如下圖所示:

3.代碼中有 try/catch

在前面 @Transactional 的執(zhí)行流程中,我們提到:當(dāng)方法中出現(xiàn)了異常之后,事務(wù)會自動回滾。然而,如果在程序中加了 try/catch 之后,@Transactional 就不會自動回滾事務(wù)了,示例代碼如下:

@Transactional
@RequestMapping("/save")
public int save(UserInfo userInfo) throws InterruptedException {
// 非空效驗
if (userInfo == null ||
!StringUtils.hasLength(userInfo.getUsername()) ||
!StringUtils.hasLength(userInfo.getPassword()))
return 0;
int result = userService.save(userInfo);
try {
int num = 10 / 0; // 此處設(shè)置一個異常
} catch (Exception e) {
}
return result;
}

以上程序的運行結(jié)果如下:

此時,查詢數(shù)據(jù)庫我們發(fā)現(xiàn),程序并沒有執(zhí)行回滾操作,數(shù)據(jù)庫中被成功的添加了一條數(shù)據(jù),如下圖所示:

4.調(diào)用類內(nèi)部 @Transactional 方法

當(dāng)調(diào)用類內(nèi)部的 @Transactional 修飾的方法時,事務(wù)是不會生效的,示例代碼如下:

@RequestMapping("/save")
public int saveMappping(UserInfo userInfo) {
return save(userInfo);
}
@Transactional
public int save(UserInfo userInfo) {
// 非空效驗
if (userInfo == null ||
!StringUtils.hasLength(userInfo.getUsername()) ||
!StringUtils.hasLength(userInfo.getPassword()))
return 0;
int result = userService.save(userInfo);
int num = 10 / 0; // 此處設(shè)置一個異常
return result;
}

以上代碼我們在添加方法 save 中添加了 @Transactional 聲明式事務(wù),并且添加了異常代碼,我們預(yù)期的結(jié)果是程序出現(xiàn)異常,事務(wù)進(jìn)行自動回滾,以上程序的執(zhí)行結(jié)果如下:

然而,當(dāng)我們查詢數(shù)據(jù)庫時發(fā)現(xiàn),程序執(zhí)行并不符合我們的預(yù)期,添加的數(shù)據(jù)并沒有進(jìn)行自動回滾操作,如下圖所示:

5.數(shù)據(jù)庫不支持事務(wù)

我們程序中的 @Transactional 只是給調(diào)用的數(shù)據(jù)庫發(fā)送了:開始事務(wù)、提交事務(wù)、回滾事務(wù)的指令,但是如果數(shù)據(jù)庫本身不支持事務(wù),比如 MySQL 中設(shè)置了使用 MyISAM 引擎,那么它本身是不支持事務(wù)的,這種情況下,即使在程序中添加了 @Transactional 注解,那么依然不會有事務(wù)的行為,這就是巧婦也難為無米之炊吧。

總結(jié)

當(dāng)聲明式事務(wù) @Transactional 遇到以下場景時,事務(wù)會失效:

  • 非 public 修飾的方法;
  • timeout 設(shè)置過小;
  • 代碼中使用 try/catch 處理異常;
  • 調(diào)用類內(nèi)部 @Transactional 方法;
  • 數(shù)據(jù)庫不支持事務(wù)。

參考 & 鳴謝

www.cnblogs.com/frankyou/p/12691463.html

責(zé)任編輯:武曉燕 來源: 今日頭條
相關(guān)推薦

2022-06-27 07:23:44

MySQL常量優(yōu)化

2022-09-20 22:27:08

事務(wù)失效public 修飾

2021-11-08 15:17:15

變量Defer 失效

2024-11-20 08:00:00

死鎖多線程編程

2022-04-13 20:53:15

Spring事務(wù)管理

2023-09-27 16:22:51

SpringMySQL原子性

2012-04-25 09:24:40

Android

2025-04-11 01:00:00

線程鎖Spring事務(wù)

2021-04-15 08:01:27

Spring聲明式事務(wù)

2022-01-18 06:59:50

HashMap循環(huán)底層

2020-08-07 15:15:01

Java內(nèi)存泄漏面試

2023-05-05 07:39:04

Spring事務(wù)面試

2023-09-28 09:07:54

注解失效場景

2025-08-06 00:00:01

事務(wù)失效聲明式

2022-09-25 22:12:07

事務(wù)SpringBoot

2022-09-19 06:16:23

事務(wù)隔離級別Spring

2021-12-13 11:12:41

Spring事務(wù)失效

2022-09-12 22:27:05

編程式事務(wù)聲明式事務(wù)對象

2022-10-09 20:52:19

事務(wù)隔離級別傳播機制

2022-08-09 09:34:32

Spring開發(fā)
點贊
收藏

51CTO技術(shù)棧公眾號

www黄色日本| 国产精品久久久久久久久久新婚| 能看毛片的网站| 羞羞网站在线看| 成人国产精品免费观看视频| 97色在线观看| 日本精品在线观看视频| 91麻豆精品| 亚洲第一主播视频| 欧美日韩三区四区| 国产精品久久久久久久成人午夜| 午夜视频一区| 亚洲精品美女久久| 人人干人人视频| 99久久精品免费观看国产| 99国产麻豆精品| 国产日韩欧美夫妻视频在线观看| 青青草精品在线视频| 色哟哟精品丝袜一区二区| 欧美日韩成人一区二区| 日本wwwcom| 国产精品ⅴa有声小说| 狠狠色狠狠色综合系列| 午夜欧美不卡精品aaaaa| 调教驯服丰满美艳麻麻在线视频| 2020最新国产精品| 欧美亚洲国产怡红院影院| 大胆欧美熟妇xx| 国产剧情在线观看| 懂色av中文一区二区三区| 国产97在线视频| 加勒比婷婷色综合久久| 九九精品在线| 日韩欧美亚洲国产另类| 嫩草影院国产精品| 97人人爽人人澡人人精品| 亚洲欧洲精品天堂一级| 久久久久久久久一区二区| 国产成人精品av在线观| 日本不卡123| 日韩av第一页| 日韩免费一级片| 无需播放器亚洲| 亚洲一级一级97网| 在线观看日韩精品视频| 日韩在线观看一区二区三区| 欧美色男人天堂| 欧美 国产 日本| 国产亚av手机在线观看| 亚洲欧美日韩电影| 亚洲国产欧洲综合997久久| 三级毛片在线免费看| www.视频一区| 国产欧美韩日| 囯产精品久久久久久| 国产一区二区精品久久99| 国产在线高清精品| 中文字幕精品一区二区精| 老司机精品久久| 日本精品久久久久影院| 在线观看日韩中文字幕| 中文字幕一区二区三区四区五区六区 | 日韩日韩日韩日韩日韩| 91cn在线观看| 亚洲一线二线三线视频| 国产尤物av一区二区三区| 婷婷丁香在线| 亚洲1区2区3区4区| 日本一道本久久| 美女在线视频免费| 狠狠做深爱婷婷久久综合一区| 麻豆tv在线播放| 欧美大胆a人体大胆做受| 精品欧美aⅴ在线网站| 日本欧美黄色片| 桃色av一区二区| 国产一区二区三区四区三区四| 中文字幕在线精品| 岛国片在线免费观看| 久久在线免费| 欧美成人合集magnet| 中日韩一级黄色片| 欧美va亚洲va日韩∨a综合色| 欧美日韩福利视频| 日韩三级免费看| 国产乱码精品| 国产精品第2页| 国产一区二区三区中文字幕| 国产一区二区91| 国产精品久久久对白| 亚洲 国产 欧美 日韩| 久久久蜜臀国产一区二区| 午夜午夜精品一区二区三区文| v天堂福利视频在线观看| 亚洲影院免费观看| 久久精品.com| 999色成人| 精品av久久707| 性欧美一区二区| 一区二区电影| 欧洲一区二区视频| 国产一区二区自拍视频| 国产高清精品网站| 欧美精品久久久| 国产日产一区二区三区| 午夜欧美大尺度福利影院在线看| 日本www.色| 亚洲三区欧美一区国产二区| 亚洲美女福利视频网站| 波多野结衣在线网址| 在线一区视频| 国产原创欧美精品| 性感美女福利视频| 中文字幕在线播放不卡一区| 国产精品无码一区二区在线| 日韩电影精品| 国产视频精品免费播放| 欧美xxxx黑人xyx性爽| 欧美一级网站| 成人xxxxx色| 98在线视频| 亚洲成人动漫精品| 午夜免费一级片| 男男gay无套免费视频欧美| 欧美高清激情视频| 一二三四区视频| 91麻豆免费视频| 欧美少妇在线观看| 国产私拍福利精品视频二区| 亚洲黄一区二区| 全网免费在线播放视频入口| 日韩精品成人一区二区在线| 国内精品久久国产| 中文字幕伦理免费在线视频| 欧美在线观看18| 中文成人无字幕乱码精品区| 欧美在线资源| 国产精品丝袜久久久久久高清 | caoporn视频在线| 69精品人人人人| 日本美女bbw| 久久一区精品| 国产一区精品在线| 欧美24videosex性欧美| 日韩一区二区不卡| 中国毛片直接看| 精品一区二区av| 亚洲一区三区电影在线观看| 成人免费av电影| 亚洲欧洲黄色网| 黑人精品无码一区二区三区AV| 成人av影院在线| 91av资源网| 奇米777国产一区国产二区| 国内精品美女av在线播放| 日韩一区免费视频| 亚洲成人综合在线| 成人手机在线免费视频| 99视频精品| 久久精品日产第一区二区三区乱码 | 欧美变态另类刺激| 精品少妇3p| 98精品国产高清在线xxxx天堂| 日韩在线观看视频一区二区三区| 亚洲国产成人tv| av网页在线观看| 国产精品亚洲综合色区韩国| 日本午夜精品一区二区| 开心久久婷婷综合中文字幕| 日韩中文第一页| 精品国产av一区二区| 亚洲精品国产精品乱码不99| 佐山爱在线视频| 欧美三级情趣内衣| 国产精品免费观看在线| 亚洲av综合色区无码一区爱av| 亚洲一区二区不卡免费| 小日子的在线观看免费第8集| 91精品综合| 国产区欧美区日韩区| 狼人综合视频| 亚洲午夜国产成人av电影男同| 国产成人a v| 国产精品美女久久久久久久网站| 国产又大又黄又猛| 五月婷婷亚洲| 国产一区二区三区四区hd| 国产美女精品写真福利视频| 亚洲精品国精品久久99热| 免费一级片在线观看| 91麻豆免费在线观看| 丁香婷婷激情网| 日韩国产欧美| 国产精品v欧美精品v日韩精品 | 久久久亚洲网站| 你懂的视频在线| 9191成人精品久久| 国产第一页第二页| 国产午夜精品在线观看| 日本少妇激三级做爰在线| 樱桃成人精品视频在线播放| 免费久久99精品国产自| av在线播放一区二区| 欧美激情一区二区三区久久久| 国产精品国产高清国产| 在线亚洲欧美专区二区| 久久免费精彩视频| 26uuu欧美| 亚洲va在线va天堂va偷拍| 亚洲美洲欧洲综合国产一区| 日本日本精品二区免费| 国产一区二区高清在线| 81精品国产乱码久久久久久| xvideos国产在线视频| 日韩高清免费观看| 91丨九色丨丰满| 亚洲日本在线视频观看| 97人妻天天摸天天爽天天| 美腿丝袜亚洲一区| 亚洲熟妇无码另类久久久| 色999日韩| 96成人在线视频| 国产精品麻豆成人av电影艾秋| 久久综合久中文字幕青草| 国产激情视频在线播放| 欧美性videosxxxxx| 日韩欧美亚洲国产| 中文字幕在线不卡一区| 波多野结衣视频播放| 国产高清不卡一区二区| 三级a三级三级三级a十八发禁止| 在线免费观看欧美| 香蕉久久夜色| 国产在视频线精品视频www666| 成人综合av网| 色综合视频一区二区三区日韩| 国产成人高清激情视频在线观看| 欧美性爽视频| yw.139尤物在线精品视频| 1024国产在线| 亚洲日本中文字幕| 日本免费网站在线观看| 日韩欧美精品在线| 91精品国产乱码久久| 欧美性黄网官网| 99热精品免费| 亚洲欧美经典视频| 日韩精品电影一区二区三区| 91一区二区在线| 国产性猛交96| 国内精品久久久久影院色| 北条麻妃av高潮尖叫在线观看| 国产日韩综合| 国产黄页在线观看| 99精品视频免费观看| 欧美极品少妇无套实战| 欧美激情日韩| 亚洲免费视频播放| 久久国产精品成人免费观看的软件| 日韩一区二区电影在线观看| 日韩精品导航| 黄色99视频| 婷婷精品在线观看| 九色91在线视频| 麻豆精品少妇| 日本视频一区二区在线观看| 国产一区二区区别| 日本视频一区在线观看| 国产韩日影视精品| 一区二区不卡视频| 999国产精品| 黄色特一级视频| 国产精品videosex极品| 影音先锋成人资源网站| 亚洲片区在线| 亚洲中文字幕无码中文字| 99热在线精品观看| www.com黄色片| 精品一区二区三区欧美| 天天av天天操| 99久久99久久免费精品蜜臀| 免费的av网站| 久久亚区不卡日本| 久久久久久久久久97| 亚洲欧洲色图综合| 亚洲成人生活片| 黑人巨大精品欧美一区二区免费 | 精品女人视频| 麻豆av一区二区| 一本色道久久综合狠狠躁的番外| 亚洲国产一区二区在线| 亚洲第一偷拍| 欧美日韩福利在线| 久久黄色级2电影| 男插女视频网站| av中文字幕一区| 天堂网中文在线观看| 国产精品成人一区二区三区夜夜夜| 免费中文字幕日韩| 亚洲成人福利片| 国产一区二区女内射| 亚洲第一色中文字幕| 日本中文字幕一区二区有码在线| 俺去亚洲欧洲欧美日韩| 精品极品在线| 国产精品专区h在线观看| 亚洲91网站| 免费观看国产成人| 激情自拍一区| 午夜欧美福利视频| 国产成人精品免费一区二区| 国产第一页精品| 亚洲午夜私人影院| av首页在线观看| 亚洲国产一区二区三区在线观看| 9i精品一二三区| 欧美成人精品一区二区| 成人看片网页| 国产精品嫩草在线观看| 国产精品久久天天影视| 欧美黄网站在线观看| 韩国av一区二区三区四区 | 国产精品巨作av| 视频一区国产精品| 黄色成人精品网站| 亚洲一二区在线观看| 久久精品水蜜桃av综合天堂| 色欲狠狠躁天天躁无码中文字幕 | 2022国产精品| 欧美岛国激情| 日韩久久一级片| 国产美女精品一区二区三区| 日韩黄色中文字幕| 黄色成人av在线| 亚洲国产成人在线观看| 日韩小视频在线| 亚洲天堂一区二区| 久久资源av| 狠狠干成人综合网| 免费网站在线观看黄| 中文字幕在线免费不卡| 欧美性猛交xxxx乱大交hd| 精品亚洲一区二区三区在线观看 | 日本xxxxxxx免费视频| 成人永久免费视频| 日韩免费一二三区| 欧美一区二区播放| 日本电影全部在线观看网站视频| 国产91免费看片| 羞羞答答一区二区| 亚洲 欧美 日韩 国产综合 在线 | 亚洲一区二区av在线| 99产精品成人啪免费网站| 亚洲系列中文字幕| 精品亚洲a∨| 日韩欧美精品一区二区| 日韩福利电影在线观看| 成年人网站免费在线观看| 亚洲成人动漫av| 国产黄色片免费观看| 最新中文字幕亚洲| 91精品在线免费视频| 在线不卡视频一区二区| 国产精品资源站在线| 国产黄色小视频网站| 欧美久久久一区| 免费黄网在线观看| 91中文精品字幕在线视频| 欧美激情偷拍自拍| 噼里啪啦国语在线观看免费版高清版| 国产亚洲欧美在线| 中文字幕一二三四| 久久精品这里热有精品| 欧洲亚洲精品| 日本人妻伦在线中文字幕| 国产91在线看| 蜜臀尤物一区二区三区直播| 国产一区二区三区视频免费| 成人在线爆射| 国产高潮呻吟久久久| 国产麻豆日韩欧美久久| 免费在线观看黄网站| 精品亚洲一区二区三区在线播放 | 久久夜色精品国产亚洲aⅴ| 99久久999| 少妇av一区二区三区无码| 26uuu亚洲综合色| 久久久精品毛片| 九九热99久久久国产盗摄| 激情av综合| 污视频免费在线观看网站| 国产精品超碰97尤物18| 在线观看日韩一区二区| 久久免费国产视频| 亚洲人挤奶视频| 无人码人妻一区二区三区免费| 亚洲成人免费视| 麻豆网站在线观看| 国产精品.com| 亚洲中午字幕|