javascript
Spring事务管理机制
Spring事務管理的四個優點:
我們重點講解spring的事務管理的相關的API,還有聲明式事務管理
Spring事務管理主要提供了三個接口來完成
這是一個事務管理器,可以來選擇相關的平臺(jdbc hibernate jpa…)
它定義事務的一些相關信息 例如 隔離 傳播 超時 只讀
它主要描述事務具體的運行狀態
?
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
它定義了事務狀態信息,在事務運行過程中,得到某個時間點的狀態
?
聲明式事務管理
事務管理方式
這種方案,它不具有侵入性,不需要修改原來的業務代碼
?
基于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事务管理机制的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 事务的隔离级别演示-避免脏读,演示不可重
- 下一篇: AngularJS 快速编程入门