日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 前端技术 > javascript >内容正文

javascript

Spring事务管理机制

發布時間:2025/1/21 javascript 20 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Spring事务管理机制 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

Spring事務管理的四個優點:

  • 提供一致的對于不同的事務管理的API
  • 支持聲明式事務管理(重點)
  • 編程事務管理(在開發中應用比較少)
  • 優秀的整合與Spring的數據訪問
  • 我們重點講解spring的事務管理的相關的API,還有聲明式事務管理

    Spring事務管理主要提供了三個接口來完成

  • org.springframework.transaction.PlatformTransactionManager

    這是一個事務管理器,可以來選擇相關的平臺(jdbc hibernate jpa…)

  • TransactionDefinition

    它定義事務的一些相關信息 例如 隔離 傳播 超時 只讀

  • TransactionStatus

    它主要描述事務具體的運行狀態

  • ?

    PlatformTransactionManager

    平臺事務管理器

    在不同的持久化層解決技術它的事務代碼不一樣。

    JDBC開發

    ????Connection con=……;

    ????con.setAutoCommit(false);//開啟事務

    ????con.rollback();

    ????con.commit();

    Hibernate開發

    ????Session session=….;

    ????Transaction t=session.beginTransaction();

    ????t.commit();

    ????t.rollback();

    PlatformTransactionManager接口API

    DataSourceTransactionManager 主要針對于JdbcTemplate開發 MyBatis開發

    HibernateTransactionManasger主要針對于Hibernate開發

    JpaTransactionManager 主要針對于JPA開發。

    ?

    TransactionDefinition

    它描述的是事務的定義信息。

    ????

    在TransactionDefinition中定義了大量的常量

    隔離

    以下是關于隔離性相關信息

    事務的四個特性 ACID 原子性 一致性 隔離性 持久性。

    不考慮事務隔離性有什么問題?

    ????臟讀,不可重復讀 虛讀。

    ISOLATION_DEFUALT 它使用后端數據庫的默認隔離級別(spring中選項)

    ISOLATION_READ_UNCOMMITTED 不能解決問題,會發生臟讀 不可重復讀 虛讀

    ISOLATION_READ_COMMITTED 可以解決臟讀 會產生不可重復讀與虛讀。

    ISOLATION_REPEATABLE_READ 可以解決臟讀,不可重復讀 解決不了虛讀

    ISOLATION_SERIALIZABLE 串行化,可以解決所有問題

    對于不現的數據庫,它的底層默認事務隔離級別不一樣。

    Oracle數據庫它默認的是read_committed

    Mysql數據庫它默認的是repeatable_read.

    ?

    超時

    默認值是-1 它使用的是數據庫默認的超時時間。

    ?

    只讀

    ????它的值有兩個true/false,如果選擇true一般是在select操作時

    ????

    傳播

    它解決的是兩個被事務管理的方法互相調用問題。它與數據庫沒關系,是程序內部維護的問題。

    以下定義了事務的傳播行為

    以上操作中最常用的三種:

    PROPAGATION_REQUIRED 默認值 兩個操作處于同一個事務,如果之前沒有事務,新建一個事務

    PROPAGATION_REQUIRES_NEW

    兩個操作處于不同的事務

    PROPAGATION_NESTED
    它是一種嵌套事務,它是使用SavePoint來實現的。事務回滾時可以回滾到指定的savepoint,注意:它只對DataSourceTransactionManager有作用

    ?

    以下了解

    PROPAGATION_SUPPORTS 支持當前事務,如果不存在,就不使用事務

    PROPAGATION_MANDATORY 支持當前事務,如果不存在,拋出異常

    PROPAGATION_NOT_SUPPORTED 以非事務運行,如果有事務存在,掛起當前事務

    PROPAGATION_NEVER 以非事務運行,如果有事務存在,拋出異常

    ?

    TransactionStatus

    它定義了事務狀態信息,在事務運行過程中,得到某個時間點的狀態

    ?

    聲明式事務管理

    事務管理方式

  • 編碼方案 不建議使用,它具有侵入性。在原有的業務代碼基礎上去添加事務管理代碼
  • 聲明式事務控制,基于AOP對目標進行代理,添加around環繞通知。

    這種方案,它不具有侵入性,不需要修改原來的業務代碼

    ?

  • 基于xml配置聲明式事務管理方案

    第一步:在applicationContext.xml文件中添加aop與tx的名稱空間

    第二步:在applicationContext.xml文件中配置

    ????Spring提供的advice是傳統的spring advice

  • 聲明事務管理器

  • 配置通知

    Spring為我們提供了一個TransactionInterceptor來完成增強

    對于這個增強,我們可以使用spring為我們提供的一個標簽<tx:advice>來完成操作????????

  • 配置切面

    因為使用的是傳統的spring的advice,需要使用<aop:advisor>

  • 基于annotation聲明式事務管理方案

    可以使用@Transaction來在類或方法上添加聲明式事務管理

    注意:需要在applicationContext.xml文件中使用

    相當于開啟注解事務控制

    ?

    問題:關于xml方式與annotation方式的優缺點?

    ????從簡單上來說,使用注解更方便。

    ????使用配置的方案,可以對事務配置進行集中維護。

    ????

    總結

    以上是生活随笔為你收集整理的Spring事务管理机制的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。