亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

Spring事務(wù)傳播行為問題解決

 更新時間:2020年01月03日 14:35:41   作者:不死碼農(nóng)  
這篇文章主要介紹了Spring事務(wù)傳播行為問題解決,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下

這篇文章主要介紹了Spring事務(wù)傳播行為問題解決,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下

一、簡介

Spring事務(wù)配置及相關(guān)說明詳見:http://chabaoo.cn/article/177710.htm。這里說明spring事務(wù)的幾點(diǎn)注意:

1、默認(rèn)只會檢查回滾RuntimeException的異常。

2、@Transactional注解只能作用于public的方法上,默認(rèn)傳播行為 Propagation.REQUIRED

3、service內(nèi)部方法之間的調(diào)用,不會被spring攔截到,也即不會產(chǎn)生事務(wù)

二、坑點(diǎn)

主要的坑點(diǎn)就是在嵌套事務(wù)上,當(dāng)service內(nèi)部方法之間調(diào)用的時候,很可能會產(chǎn)生預(yù)期之外的效果。例如下例子:

saveUser保存用戶,如果過程出現(xiàn)異常,則執(zhí)行saveMsg方法。

public class UserServiceImpl implements UserService{
 
  @Autowired
  private UserDao userDao;
  @Autowired
  private MsgDao msgDao;
  @Autowired
  private MsgService msgService;
    @Autowired
    private UserService userService;
 
   
  @Transactional(propagation = Propagation.REQUIRED)
  public void saveUser(User user) throws Exception {
    System.out.println(user.toString());
    try {
      userDao.saveUser(user);
      int i = 1/0;
//     saveUser2(user);
    } catch (Exception e) {
//     msgService.saveMsg();
//           this.saveMsg();
      userService.saveMsg();
      throw new RuntimeException();
    }
  }
   
  @Transactional(propagation = Propagation.REQUIRES_NEW)
  public void saveMsg() {
    TbMsg msg = TbMsg.builder().name("xiaocao").msg("xiaoxiao").age(27).build();
    msgDao.saveMsg(msg);
  }
}

單元測試,調(diào)用saveUser方法,并沒有達(dá)到想要的效果(saveUser異常,SaveMsg隔離級別是REQUIRES_NEW,理論上應(yīng)該能入庫)。

失敗原因即是上面第一節(jié)中說的:同一個service中的方法調(diào)用,不會產(chǎn)生新事務(wù)。Spring 事務(wù)的管理控制,主要是通過AOP的動態(tài)代理增強(qiáng)來實(shí)現(xiàn)的,目標(biāo)對象本身并沒有任何的事務(wù)管理能力,都是通過代理對象動態(tài)增強(qiáng)功能去實(shí)現(xiàn)事務(wù)管理。在同一個service中的方法調(diào)用,相當(dāng)于是目標(biāo)對象本身的this調(diào)用,并沒有經(jīng)過代理對象,所以自然的事務(wù)配置的嵌套均無效。

解決策略:

1、saveMsg移動到另一個service中,在UserServiceImpl中導(dǎo)入MsgService,saveUser中通過MsgService類去調(diào)用。

2、UserServiceImpl中注入自己,通過注入的自身service進(jìn)行調(diào)用。

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

相關(guān)文章

  • Java?BigDecimal正確用法詳解

    Java?BigDecimal正確用法詳解

    Java在java.math包中提供的API類BigDecimal,用來對超過16位有效位的數(shù)進(jìn)行精確的運(yùn)算。雙精度浮點(diǎn)型變量double可以處理16位有效數(shù),但在實(shí)際應(yīng)用中,可能需要對更大或者更小的數(shù)進(jìn)行運(yùn)算和處理
    2022-10-10
  • Java Assert.assertEquals案例詳解

    Java Assert.assertEquals案例詳解

    這篇文章主要介紹了Java Assert.assertEquals案例詳解,本篇文章通過簡要的案例,講解了該項技術(shù)的了解與使用,以下就是詳細(xì)內(nèi)容,需要的朋友可以參考下
    2021-08-08
  • 詳解HDFS多文件Join操作的實(shí)例

    詳解HDFS多文件Join操作的實(shí)例

    這篇文章主要介紹了詳解HDFS多文件Join操作的實(shí)例的相關(guān)資料,希望通過本文能幫助到大家,讓大家理解掌握這部分內(nèi)容,需要的朋友可以參考下
    2017-10-10
  • Java生產(chǎn)者消費(fèi)者的三種實(shí)現(xiàn)方式

    Java生產(chǎn)者消費(fèi)者的三種實(shí)現(xiàn)方式

    這篇文章主要介紹了Java生產(chǎn)者消費(fèi)者的三種實(shí)現(xiàn)方式,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2024-07-07
  • Java日期時間類(Date、DateFormat、Calendar)解析

    Java日期時間類(Date、DateFormat、Calendar)解析

    這篇文章主要介紹了Java日期時間類(Date、DateFormat、Calendar)解析,文章圍繞主題展開詳細(xì)的內(nèi)容介紹,具有一定的參考價值,需要的小伙伴可以參考一下
    2022-06-06
  • Nacos服務(wù)實(shí)例的權(quán)重設(shè)置方式(以及設(shè)置為0時的作用與場景)

    Nacos服務(wù)實(shí)例的權(quán)重設(shè)置方式(以及設(shè)置為0時的作用與場景)

    這篇文章主要介紹了Nacos服務(wù)實(shí)例的權(quán)重設(shè)置方式(以及設(shè)置為0時的作用與場景),具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2024-07-07
  • Java中try catch處理異常示例

    Java中try catch處理異常示例

    這篇文章主要給大家介紹了關(guān)于Java中try catch 的基本用法,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2021-12-12
  • springboot3整合knife4j詳細(xì)圖文教程(swagger增強(qiáng))

    springboot3整合knife4j詳細(xì)圖文教程(swagger增強(qiáng))

    開發(fā)api提供對應(yīng)的接口規(guī)范進(jìn)行聯(lián)調(diào)或并行開發(fā),api文檔管理必不可少,常用的Knife4j基于swagger(依賴已經(jīng)compile),可以進(jìn)行管理,下面這篇文章主要給大家介紹了關(guān)于springboot3整合knife4j的相關(guān)資料,需要的朋友可以參考下
    2024-03-03
  • Android Studio中ButterKnife插件的安裝與使用詳解

    Android Studio中ButterKnife插件的安裝與使用詳解

    本篇文章主要介紹了Android Studio中ButterKnife插件的安裝與使用詳解,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2018-01-01
  • Java使用開源Rxtx實(shí)現(xiàn)串口通訊

    Java使用開源Rxtx實(shí)現(xiàn)串口通訊

    這篇文章主要為大家詳細(xì)介紹了Java使用開源Rxtx實(shí)現(xiàn)串口通訊,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2018-12-12

最新評論