久久r热视频,国产午夜精品一区二区三区视频,亚洲精品自拍偷拍,欧美日韩精品二区

您的位置:首頁(yè)技術(shù)文章
文章詳情頁(yè)

SpringBoot事務(wù)使用及回滾實(shí)現(xiàn)代碼詳解

瀏覽:3日期:2023-05-04 10:01:09

Springboot中事務(wù)的使用:

1、啟動(dòng)類(lèi)加上@EnableTransactionManagement注解,開(kāi)啟事務(wù)支持(其實(shí)默認(rèn)是開(kāi)啟的)。

2、在使用事務(wù)的public(只有public支持事務(wù))方法(或者類(lèi)-相當(dāng)于該類(lèi)的所有public方法都使用)加上@Transactional注解。

在實(shí)際使用中一般是在service中使用@Transactional,那么對(duì)于controller->service流程中:

如果controller未開(kāi)啟事務(wù),service中開(kāi)始了事務(wù),service成功執(zhí)行,controller在之后的運(yùn)行中出現(xiàn)異常(錯(cuò)誤),不會(huì)自動(dòng)回滾。

也就是說(shuō),只有在開(kāi)啟事務(wù)的方法中出現(xiàn)異常(默認(rèn)只有非檢測(cè)性異常才生效-RuntimeException )(錯(cuò)誤-Error)才會(huì)自動(dòng)回滾。

如果想要對(duì)拋出的任何異常都進(jìn)行自動(dòng)回滾(而不是只針對(duì)RuntimeException),只需要在使用@Transactional(rollbackFor = Exception.class)即可。

開(kāi)啟事務(wù)的方法中事務(wù)回滾的情況:

①未發(fā)現(xiàn)的異常,程序運(yùn)行過(guò)程中自動(dòng)拋出RuntimeException或者其子類(lèi),程序終止,自動(dòng)回滾。

②使用TransactionAspectSupport.currentTransactionStatus().setRollbackOnly();進(jìn)行手動(dòng)回滾。

③注意:如果在try-catch語(yǔ)句中對(duì)可能出現(xiàn)的異常(RuntimeException)進(jìn)行了處理,沒(méi)有再手動(dòng)throw異常,spring認(rèn)為該方法成功執(zhí)行,不會(huì)進(jìn)行回滾,此時(shí)需要調(diào)用②中方法進(jìn)行手動(dòng)回滾,如下圖:

另外,如果try-catch語(yǔ)句在finally中進(jìn)行了return操作,那么catch中手動(dòng)拋出的異常也會(huì)被覆蓋,同樣不會(huì)自動(dòng)回滾。

SpringBoot事務(wù)使用及回滾實(shí)現(xiàn)代碼詳解

//不會(huì)自動(dòng)回滾try{ throw new RuntimeException();}catch(RuntimeException e){ e.printStackTrace();}finally{}//會(huì)自動(dòng)回滾try{ throw new RuntimeException();}catch(RuntimeException e){ e.printStackTrace(); throw new RuntimeException();}finally{}

以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持好吧啦網(wǎng)。

標(biāo)簽: Spring
相關(guān)文章:
主站蜘蛛池模板: 建水县| 洛阳市| 遂昌县| 休宁县| 连平县| 龙胜| 安徽省| 河西区| 东乡族自治县| 临泉县| 洪洞县| 昭平县| 静海县| 雅江县| 五原县| 犍为县| 昌黎县| 聊城市| 金塔县| 平顺县| 泸州市| 志丹县| 多伦县| 库伦旗| 阿拉善盟| 绥化市| 正镶白旗| 孝义市| 阳泉市| 兴海县| 黑水县| 博罗县| 垦利县| 准格尔旗| 海淀区| 昌宁县| 隆回县| 宜兴市| 盐亭县| 霍山县| 湘乡市|