最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Springboot事務(wù)失效的原因及解決辦法詳解

 更新時(shí)間:2023年10月19日 09:54:59   作者:zsycode  
這篇文章主要介紹了Springboot事務(wù)失效的原因及解決辦法詳解,spring中的事務(wù)是依賴(lài)AOP的,AOP是通過(guò)動(dòng)態(tài)代理實(shí)現(xiàn)的,只有通過(guò)代理類(lèi)訪問(wèn)的方法才能被攔截,而addMultiFile直接內(nèi)部調(diào)用了addFile方法,所以addFile中的事務(wù)就不會(huì)生效

問(wèn)題

先看下問(wèn)題代碼,下面兩個(gè)方法屬于同一個(gè)service類(lèi)

@Transactional(rollbackFor = Exception.class)
    public void addFile(FileDTO file, String operator) {
    	//一些列操作
    	...
    }
public void addMultiFiles(MultipartFile[] files, String operator) throws IOException {
	...
	addFIle();
	...
}

如圖,addFile添加了事務(wù)管理,然后通過(guò)測(cè)試addMultiFile測(cè)試時(shí)addFile中的事務(wù)失效,無(wú)法在出現(xiàn)異常時(shí)回滾數(shù)據(jù)庫(kù)。

原因

spring中的事務(wù)是依賴(lài)AOP的,AOP是通過(guò)動(dòng)態(tài)代理實(shí)現(xiàn)的,只有通過(guò)代理類(lèi)訪問(wèn)的方法才能被攔截(外部調(diào)用都是調(diào)用的相應(yīng)的代理類(lèi))

而上述問(wèn)題中addMultiFile直接內(nèi)部調(diào)用了addFile方法,所以addFile中的事務(wù)就不會(huì)生效。

解決辦法

知道原因之后就好解決了,想辦法獲取該service類(lèi)的代理類(lèi),通過(guò)代理類(lèi)來(lái)調(diào)用addfile方法就行

public void addMultiFiles(MultipartFile[] files, String operator) throws IOException {
	...
	/*進(jìn)行上傳,直接內(nèi)部調(diào)用會(huì)導(dǎo)致事務(wù)失效,需要獲取相應(yīng)的代理對(duì)象來(lái)調(diào)用*/
   ((FileService)AopContext.currentProxy()).addFile(fileDTO, operator);
	...
}

加入后運(yùn)行會(huì)報(bào)個(gè)錯(cuò),需要你設(shè)置exposeProxy = true 在該類(lèi)上加個(gè)注解

@EnableAspectJAutoProxy(exposeProxy = true)  //暴露代理對(duì)象
public class FileService {
	...
}

此時(shí)addFile就能正?;貪L

補(bǔ)充

加入@EnableAspectJAutoProxy提示找不到該類(lèi) 原來(lái)是自己沒(méi)有導(dǎo)入aop的相關(guān)依賴(lài)

		<dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-aop</artifactId>
        </dependency>

到此這篇關(guān)于Springboot事務(wù)失效的原因及解決辦法詳解的文章就介紹到這了,更多相關(guān)Springboot事務(wù)失效內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • Java基于Rest?Assured自動(dòng)化測(cè)試接口詳解

    Java基于Rest?Assured自動(dòng)化測(cè)試接口詳解

    Rest Assured 是一個(gè)基于 Java 的流行的用于測(cè)試 RESTful API 的庫(kù)。這篇文章主要介紹了Java如何基于Rest?Assured實(shí)現(xiàn)自動(dòng)化測(cè)試接口,需要的可以參考一下
    2023-03-03
  • java 二進(jìn)制數(shù)據(jù)與16進(jìn)制字符串相互轉(zhuǎn)化方法

    java 二進(jìn)制數(shù)據(jù)與16進(jìn)制字符串相互轉(zhuǎn)化方法

    今天小編就為大家分享一篇java 二進(jìn)制數(shù)據(jù)與16進(jìn)制字符串相互轉(zhuǎn)化方法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2018-07-07
  • 關(guān)于jackson序列化和feign返回值的問(wèn)題

    關(guān)于jackson序列化和feign返回值的問(wèn)題

    這篇文章主要介紹了關(guān)于jackson序列化和feign返回值的問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2022-03-03
  • Spring Boot 使用WebAsyncTask異步返回結(jié)果

    Spring Boot 使用WebAsyncTask異步返回結(jié)果

    這篇文章主要介紹了Spring Boot 使用WebAsyncTask異步返回結(jié)果的相關(guān)資料,需要的朋友可以參考下
    2018-02-02
  • spring集成okhttp3的步驟詳解

    spring集成okhttp3的步驟詳解

    okhttp是一個(gè)封裝URL,比HttpClient更友好易用的工具,下面這篇文章主要給大家介紹了關(guān)于spring集成okhttp3的相關(guān)資料,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面來(lái)一起看看吧。
    2018-04-04
  • 微服務(wù)架構(gòu)設(shè)計(jì)RocketMQ基礎(chǔ)及環(huán)境整合

    微服務(wù)架構(gòu)設(shè)計(jì)RocketMQ基礎(chǔ)及環(huán)境整合

    這篇文章主要介紹了微服務(wù)架構(gòu)設(shè)計(jì)入門(mén)RocketMQ的基礎(chǔ)及環(huán)境整合實(shí)現(xiàn)步驟,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步
    2021-10-10
  • Idea?編譯并運(yùn)行?Spark?3.1.1?源碼的方法

    Idea?編譯并運(yùn)行?Spark?3.1.1?源碼的方法

    這篇文章主要介紹了Idea?編譯并運(yùn)行?Spark?3.1.1源碼,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2022-11-11
  • IDEA2020.1啟動(dòng)SpringBoot項(xiàng)目出現(xiàn)java程序包:xxx不存在

    IDEA2020.1啟動(dòng)SpringBoot項(xiàng)目出現(xiàn)java程序包:xxx不存在

    這篇文章主要介紹了IDEA2020.1啟動(dòng)SpringBoot項(xiàng)目出現(xiàn)java程序包:xxx不存在,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2020-06-06
  • JAVA如何按字節(jié)截取字符串

    JAVA如何按字節(jié)截取字符串

    這篇文章主要介紹了JAVA如何按字節(jié)截取字符串,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2020-01-01
  • SpringBoot+ResponseBodyEmitter實(shí)時(shí)異步流式推送的實(shí)現(xiàn)

    SpringBoot+ResponseBodyEmitter實(shí)時(shí)異步流式推送的實(shí)現(xiàn)

    本文主要介紹了SpringBoot+ResponseBodyEmitter實(shí)時(shí)異步流式推送的實(shí)現(xiàn),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2025-11-11

最新評(píng)論

江北区| 宜州市| 商水县| 盐亭县| 石阡县| 江安县| 林甸县| 游戏| 商水县| 保德县| 泽州县| 镇安县| 青田县| 宜兰市| 峨眉山市| 平度市| 钟祥市| 祁门县| 依安县| 杭锦旗| 西华县| 白河县| 大埔县| 遂川县| 张北县| 共和县| 武宁县| 合阳县| 额济纳旗| 扬中市| 金寨县| 台湾省| 罗江县| 城口县| 武安市| 宝兴县| 泉州市| 廊坊市| 内丘县| 长海县| 莱阳市|