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

SpringBoot內(nèi)部調(diào)用事務(wù)不起作用問題的解決方案

 更新時(shí)間:2019年10月10日 11:01:23   作者:平頭哥的技術(shù)博文  
這篇文章主要介紹了SpringBoot事務(wù)不起作用問題的解決方案,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下

在做業(yè)務(wù)開發(fā)時(shí),遇到了一個(gè)事務(wù)不起作用的問題。大概流程是這樣的,方法內(nèi)部的定時(shí)任務(wù)調(diào)用了一個(gè)帶事務(wù)的方法,失敗后事務(wù)沒有回滾。查閱資料后,問題得到解決,記錄下來分享給大家。

場景

我在這里模擬一個(gè)場景,大概的調(diào)用方式就如下面的代碼這樣。

  @Override
  @Transactional(rollbackFor = RuntimeException.class)
  public void insertUser(User user) {
    userMapper.insertUser(user);
    throw new RuntimeException("");
  }
  
  /**
   * 內(nèi)部調(diào)用新增方法
   *
   * @param user
   */
  @Override
  public void invokeInsertUser(User user) {
    this.insertUser(user);
  }

原因

AOP使用的是動(dòng)態(tài)代理的機(jī)制,它會(huì)給類生成一個(gè)代理類,事務(wù)的相關(guān)操作都在代理類上完成。內(nèi)部方式使用this調(diào)用方式時(shí),使用的是實(shí)例調(diào)用,并沒有通過代理類調(diào)用方法,所以會(huì)導(dǎo)致事務(wù)失效。

解決辦法

方法一 引入自身bean

在類內(nèi)部通過@Autowired將本身bean引入,然后通過調(diào)用自身bean,從而實(shí)現(xiàn)使用AOP代理操作。

注入自身bean

  @Autowired
  @Lazy
  private UserService service;

修改invokeInsertUser方法

  /**
   * 解決方法一 在bean中將自己注入進(jìn)來
   * @param user
   */
  @Override
  public void invokeInsertUser(User user) {
    this.service.insertUser(user);
  }

方法二 通過ApplicationContext引入bean

通過ApplicationContext獲取bean,通過bean調(diào)用內(nèi)部方法,就使用了bean的代理類。

注入ApplicationContext

  @Autowired
  ApplicationContext applicationContext;

修改invokeInsertUser方法

  /**
   * 解決方法二 通過applicationContext獲取到bean
   * @param user
   */
  @Override
  public void invokeInsertUser(User user) {
    ((UserService)applicationContext.getBean("userService")).invokeInsertUser(user);
  }

方法三 通過AopContext獲取當(dāng)前類的代理類

通過AopContext獲取當(dāng)前類的代理類,直接通過代理類調(diào)用方法

在引導(dǎo)類上添加@EnableAspectJAutoProxy(exposeProxy=true)注解

修改invokeInsertUser方法

  /**
   * 解決方法三 通過applicationContext獲取到bean
   *
   * @param user
   */
  @Override
  public void invokeInsertUser(User user) {
    ((UserService) AopContext.currentProxy()).invokeInsertUser(user);
  }

以上就是內(nèi)部方法調(diào)用時(shí),事務(wù)不起作用的原因及解決辦法。

以上就是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。

相關(guān)文章

  • SpringBoot 集成 ShedLock 分布式鎖的示例詳解

    SpringBoot 集成 ShedLock 分布式鎖的示例詳解

    ShedLock是一個(gè)在分布式環(huán)境中使用的定時(shí)任務(wù)框架,用于解決在分布式環(huán)境中的多個(gè)實(shí)例的相同定時(shí)任務(wù)在同一時(shí)間點(diǎn)重復(fù)執(zhí)行的問題,本文重點(diǎn)給大家介紹SpringBoot 分布式鎖ShedLock的相關(guān)知識(shí),感興趣的朋友一起看看吧
    2021-08-08
  • Java Map 按照Value排序的實(shí)現(xiàn)方法

    Java Map 按照Value排序的實(shí)現(xiàn)方法

    Map是鍵值對的集合接口,它的實(shí)現(xiàn)類主要包括:HashMap,TreeMap,Hashtable以及LinkedHashMap等。這篇文章主要介紹了Java Map 按照Value排序的實(shí)現(xiàn)方法,需要的朋友可以參考下
    2016-08-08
  • IDEA 如何導(dǎo)入別人的javaweb項(xiàng)目進(jìn)行部署

    IDEA 如何導(dǎo)入別人的javaweb項(xiàng)目進(jìn)行部署

    這篇文章主要介紹了IDEA 如何導(dǎo)入別人的javaweb項(xiàng)目進(jìn)行部署,本文給大家分享我的詳細(xì)部署過程及遇到問題解決方法,需要的朋友可以參考下
    2023-03-03
  • Java中volatile關(guān)鍵字實(shí)現(xiàn)原理

    Java中volatile關(guān)鍵字實(shí)現(xiàn)原理

    本文詳細(xì)解讀一下volatile關(guān)鍵字如何保證變量在多線程之間的可見性,對Java中volatile關(guān)鍵字實(shí)現(xiàn)原理感興趣的朋友一起通過本文學(xué)習(xí)吧
    2017-06-06
  • Java反射機(jī)制詳解

    Java反射機(jī)制詳解

    Java的反射機(jī)制是在運(yùn)行狀態(tài)中,對于任何一個(gè)類,都可以知道這個(gè)類的所有屬性和方法,對于任何一個(gè)對象,都可以調(diào)用它所有的方法和屬性,修改部分類型信息。本文就來詳細(xì)講講Java反射機(jī)制的使用
    2022-07-07
  • java9學(xué)習(xí)系列之安裝與jshell使用

    java9學(xué)習(xí)系列之安裝與jshell使用

    2017年9月21日,千呼萬喚始出來,Java9終于發(fā)布了。作為自己天天接觸的“對象”,還是應(yīng)該多花點(diǎn)心思去了解她。后續(xù)再進(jìn)一步了解詳細(xì)特性。下面這篇文章主要給大家介紹了關(guān)于java9學(xué)習(xí)系列之安裝與jshell使用的相關(guān)資料,需要的朋友可以參考下。
    2017-09-09
  • Java實(shí)現(xiàn)銀行ATM系統(tǒng)

    Java實(shí)現(xiàn)銀行ATM系統(tǒng)

    這篇文章主要為大家詳細(xì)介紹了Java實(shí)現(xiàn)銀行ATM系統(tǒng),文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2020-04-04
  • JAVA獲取CLASSPATH路徑的方法詳解

    JAVA獲取CLASSPATH路徑的方法詳解

    這篇文章主要介紹了Java 中獲取類路徑 classpath 的方法,非常不錯(cuò),具有參考借鑒價(jià)值,需要的朋友可以參考下
    2016-09-09
  • Spring自動(dòng)裝配Bean實(shí)現(xiàn)過程詳解

    Spring自動(dòng)裝配Bean實(shí)現(xiàn)過程詳解

    這篇文章主要介紹了Spring自動(dòng)裝配Bean實(shí)現(xiàn)過程詳解,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2020-02-02
  • Java實(shí)現(xiàn)markdown格式內(nèi)容轉(zhuǎn)換為word

    Java實(shí)現(xiàn)markdown格式內(nèi)容轉(zhuǎn)換為word

    這篇文章主要為大家簡單介紹了如何利用Java實(shí)現(xiàn)markdown格式內(nèi)容轉(zhuǎn)換為word文檔,文中的示例代碼簡潔易懂,有需要的小伙伴可以參考一下
    2025-03-03

最新評論

正阳县| 保定市| 雅江县| 孙吴县| 鹤壁市| 东莞市| 大埔区| 儋州市| 鲁山县| 冀州市| 新巴尔虎右旗| 安图县| 龙泉市| 秀山| 开江县| 钟山县| 达州市| 突泉县| 阿荣旗| 中江县| 视频| 清镇市| 平凉市| 蓝山县| 桐城市| 九龙县| 无极县| 上犹县| 平昌县| 乌什县| 枣阳市| 江阴市| 吴旗县| 涞水县| 阜新市| 彩票| 东乌珠穆沁旗| 南投市| 诸城市| 陆丰市| 龙江县|