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

Spring事務(wù)失效的8大原因詳解

 更新時(shí)間:2023年09月09日 08:39:23   作者:沐雨金鱗  
這篇文章主要介紹了Spring事務(wù)失效的8大原因詳解,這里以 MySQL 為例,其 MyISAM 引擎是不支持事務(wù)操作的,InnoDB 才是支持事務(wù)的引擎,一般要支持事務(wù)都會使用 InnoDB,需要的朋友可以參考下

 Spring事務(wù)失效的8大原因

  • 數(shù)據(jù)庫引擎不支持事務(wù)(都默認(rèn)InnoDB了,一般不會發(fā)生)
  • 沒有被 Spring 管理
  • 方法不是 public 的
  • 自身調(diào)用問題(常見?。?/li>
  • 數(shù)據(jù)源沒有配置事務(wù)管理器
  • 不支持事務(wù)
  • 異常被吃了(常見!)
  • 異常類型錯(cuò)誤(常見?。?/li>

1、數(shù)據(jù)庫引擎不支持事務(wù)

  • 這里以 MySQL 為例,其 MyISAM 引擎是不支持事務(wù)操作的,InnoDB 才是支持事務(wù)的引擎,一般要支持事務(wù)都會使用 InnoDB。
  • 從 MySQL 5.5.5 開始的默認(rèn)存儲引擎是:InnoDB,之前默認(rèn)的都是:MyISAM,所以這點(diǎn)要值得注意,底層引擎不支持事務(wù)再怎么搞都是白搭。

2、沒有被 Spring

管理 沒有被Spring管理,這個(gè)類就不會被加載成一個(gè) Bean,那這個(gè)類就不會被 Spring 管理了,事務(wù)自然就失效了。

3、方法不是 public 的

@Transactional  只能用于 public 的方法上,否則事務(wù)不會失效,如果要用在非 public 方法上,可以開啟  AspectJ  代理模式。

4、自身調(diào)用問題

@Service
public class OrderServiceImpl implements OrderService {
    @Transactional
    public void update(Order order) {
        updateOrder(order);
    }
    @Transactional(propagation = Propagation.REQUIRES_NEW)
    public void updateOrder(Order order) {
        // update order
    }
}
  • 這次在 update 方法上加了 @Transactional,updateOrder 加了 REQUIRES_NEW 新開啟一個(gè)事務(wù),那么新開的事務(wù)管用么?答案是:不管用!
  • 因?yàn)樗鼈儼l(fā)生了自身調(diào)用,就調(diào)該類自己的方法,而沒有經(jīng)過 Spring 的代理類,默認(rèn)只有在外部調(diào)用事務(wù)才會生效。
  • 解決方案之一就是在的類中注入自己,用注入的對象再調(diào)用另外一個(gè)方法。

5、數(shù)據(jù)源沒有配置事務(wù)管理器

@Bean
public PlatformTransactionManager transactionManager(DataSource dataSource) {
    return new DataSourceTransactionManager(dataSource);
}

如上面所示,當(dāng)前數(shù)據(jù)源若沒有配置事務(wù)管理器,那也是白搭!

6、不支持事務(wù)

@Transactional(propagation = Propagation.NOT_SUPPORTED)

Propagation.NOT_SUPPORTED: 表示不以事務(wù)運(yùn)行,當(dāng)前若存在事務(wù)則掛起,都主動不支持以事務(wù)方式運(yùn)行了,那事務(wù)生效也是白搭!

7、異常被吃了

// @Service
public class OrderServiceImpl implements OrderService {
    @Transactional
    public void updateOrder(Order order) {
        try {
            // update order
        } catch {
        }
    }
}

把異常吃了,然后又不拋出來,事務(wù)怎么回滾吧!

8、異常類型錯(cuò)誤

// @Service
public class OrderServiceImpl implements OrderService {
    @Transactional
    public void updateOrder(Order order) {
        try {
            // update order
        } catch {
            throw new Exception("更新錯(cuò)誤");
        }
    }
}

這樣事務(wù)也是不生效的,因?yàn)槟J(rèn)回滾的是:RuntimeException,如果你想觸發(fā)其他異常的回滾,需要在注解上配置一下,如:

@Transactional(rollbackFor = Exception.class)

這個(gè)配置僅限于 Throwable 異常類及其子類。

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

相關(guān)文章

  • Java超詳細(xì)分析抽象類和接口的使用

    Java超詳細(xì)分析抽象類和接口的使用

    在類中沒有包含足夠的信息來描繪一個(gè)具體的對象,這樣的類稱為抽象類,接口是Java中最重要的概念之一,它可以被理解為一種特殊的類,不同的是接口的成員沒有執(zhí)行體,是由全局常量和公共的抽象方法所組成,本文給大家介紹Java抽象類和接口,感興趣的朋友一起看看吧
    2022-04-04
  • Mybatis如何獲取最新插入數(shù)據(jù)的id

    Mybatis如何獲取最新插入數(shù)據(jù)的id

    這篇文章主要介紹了Mybatis如何獲取最新插入數(shù)據(jù)的id,具有很好的參考價(jià)值,希望對大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2022-01-01
  • Maven和IntelliJ IDEA搭建多模塊微服務(wù)的實(shí)現(xiàn)

    Maven和IntelliJ IDEA搭建多模塊微服務(wù)的實(shí)現(xiàn)

    本文主要介紹了Maven和IntelliJ IDEA搭建多模塊微服務(wù)的實(shí)現(xiàn),文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2024-05-05
  • 解決dubbo啟動報(bào)服務(wù)注冊失敗Failed?to?register?dubbo

    解決dubbo啟動報(bào)服務(wù)注冊失敗Failed?to?register?dubbo

    這篇文章主要介紹了解決dubbo啟動報(bào)服務(wù)注冊失敗Failed?to?register?dubbo問題,具有很好的參考價(jià)值,希望對大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2023-12-12
  • Java運(yùn)行時(shí)動態(tài)生成對象的方法小結(jié)

    Java運(yùn)行時(shí)動態(tài)生成對象的方法小結(jié)

    Java是一門靜態(tài)語言,通常,我們需要的class在編譯的時(shí)候就已經(jīng)生成了,為什么有時(shí)候我們還想在運(yùn)行時(shí)動態(tài)生成class呢?今天通過本文給大家分享Java運(yùn)行時(shí)動態(tài)生成對象的方法小結(jié),需要的朋友參考下吧
    2021-08-08
  • 淺析非對稱加密在接口參數(shù)中的實(shí)現(xiàn)

    淺析非對稱加密在接口參數(shù)中的實(shí)現(xiàn)

    接口層做數(shù)據(jù)加密應(yīng)該算是老生常談的一件事了,業(yè)界用的比較多的,不外乎是對稱加密,非對稱加密以及兩者的結(jié)合。本文就來聊聊非對稱加密在接口參數(shù)中的實(shí)現(xiàn),希望對大家有所幫助
    2023-02-02
  • 淺析Java內(nèi)部類——成員內(nèi)部類

    淺析Java內(nèi)部類——成員內(nèi)部類

    這篇文章主要介紹了Java 成員內(nèi)部類的相關(guān)資料,幫助大家更好的理解和學(xué)習(xí)Java 內(nèi)部類的相關(guān)知識,感興趣的朋友可以了解下
    2020-08-08
  • java操作時(shí)間方式基礎(chǔ)教程demo

    java操作時(shí)間方式基礎(chǔ)教程demo

    這篇文章主要為大家介紹了java操作時(shí)間方式demo基礎(chǔ)教程示例,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-10-10
  • Java Spring框架簡介與Spring IOC詳解

    Java Spring框架簡介與Spring IOC詳解

    Spring 框架是一個(gè)輕量級的解決方案,可以一站式地構(gòu)建企業(yè)級應(yīng)用。它是為了解決 企業(yè)應(yīng)用開發(fā)的復(fù)雜性而創(chuàng)建的。Spring 使用基本的 JavaBean 來完成以前只可能由 EJB 完成的事情。IOC 是 Inversion of Control 的縮寫,多數(shù)書籍翻譯成控制反轉(zhuǎn)
    2021-09-09
  • SpringBoot實(shí)現(xiàn)網(wǎng)頁消息推送的5種方法對比

    SpringBoot實(shí)現(xiàn)網(wǎng)頁消息推送的5種方法對比

    網(wǎng)頁消息推送是現(xiàn)代 Web 應(yīng)用的核心功能之一,Spring Boot 提供了非常成熟的支持,本文為大家整理了 5 種主流實(shí)現(xiàn)方式,有需要的小伙伴可以了解下
    2026-02-02

最新評論

泽州县| 冕宁县| 呼图壁县| 若尔盖县| 南康市| 齐河县| 探索| 双牌县| 安仁县| 吉隆县| 建瓯市| 库车县| 海兴县| 桑植县| 正阳县| 崇左市| 连州市| 巍山| 辽阳县| 凌源市| 河间市| 永寿县| 故城县| 南郑县| 韩城市| 常德市| 都江堰市| 枝江市| 乐陵市| 云林县| 黄陵县| 安远县| 屏东市| 德清县| 普格县| 黄骅市| 双峰县| 永宁县| 武宣县| 柯坪县| 达拉特旗|