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

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

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

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

場(chǎng)景

我在這里模擬一個(gè)場(chǎng)景,大概的調(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)用,并沒有通過(guò)代理類調(diào)用方法,所以會(huì)導(dǎo)致事務(wù)失效。

解決辦法

方法一 引入自身bean

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

注入自身bean

  @Autowired
  @Lazy
  private UserService service;

修改invokeInsertUser方法

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

方法二 通過(guò)ApplicationContext引入bean

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

注入ApplicationContext

  @Autowired
  ApplicationContext applicationContext;

修改invokeInsertUser方法

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

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

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

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

修改invokeInsertUser方法

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

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

以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(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í)行的問(wèn)題,本文重點(diǎn)給大家介紹SpringBoot 分布式鎖ShedLock的相關(guān)知識(shí),感興趣的朋友一起看看吧
    2021-08-08
  • Java Map 按照Value排序的實(shí)現(xiàn)方法

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

    Map是鍵值對(duì)的集合接口,它的實(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ì)部署過(guò)程及遇到問(wèn)題解決方法,需要的朋友可以參考下
    2023-03-03
  • Java中volatile關(guān)鍵字實(shí)現(xiàn)原理

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

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

    Java反射機(jī)制詳解

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

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

    2017年9月21日,千呼萬(wàn)喚始出來(lái),Java9終于發(fā)布了。作為自己天天接觸的“對(duì)象”,還是應(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)過(guò)程詳解

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

    這篇文章主要介紹了Spring自動(dòng)裝配Bean實(shí)現(xiàn)過(guò)程詳解,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(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

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

最新評(píng)論

保定市| 武城县| 成都市| 麦盖提县| 嘉荫县| 和平县| 奉化市| 辉县市| 观塘区| 新民市| 锡林浩特市| 乌兰察布市| 靖边县| 乐东| 格尔木市| 清涧县| 都兰县| 互助| 静宁县| 乐昌市| 泰顺县| 郎溪县| 宽城| 博野县| 固安县| 门源| 亚东县| 兴安县| 拉孜县| 拜城县| 泰和县| 龙里县| 紫金县| 静安区| 西昌市| 四平市| 宁阳县| 大新县| 三原县| 睢宁县| 宁强县|