Spring中的事務

全局事務和本地事務

一、全局事務html

       基本的支持分佈式事務;spring

       在業內,主要用來解決分佈式事務的方案是使用柔性事務。柔性事務包括幾種類型:兩階段型、補償型、異步確保型和最大努力通知型。sql

  事務管理器控制着全局事務,管理事務生命週期,並協調資源。資源管理器負責控制和管理實際資源。在全局事務中,爲了保證全部的操做能夠一次性要麼全提交,要麼全失敗。事務管理器和資源管理器之間的事務操做的控制是採用2PC(兩階段提交)來進行的。數據庫

二、本地事務編程

       JDBC事務異步

 

ACID,指數據庫事務正確執行的四個基本要素的縮寫。包含:原子性(Atomicity)、一致性(Consistency)、隔離性(Isolation)、持久性(Durability)。分佈式

聲明式事務和編程式事務

1 public interface PlatformTransactionManager {
2 
3     TransactionStatus getTransaction(TransactionDefinition definition) throws TransactionException;
4 
5     void commit(TransactionStatus status) throws TransactionException;
6 
7     void rollback(TransactionStatus status) throws TransactionException;
8 }

 

一、TransactionDefinition的說明優化

  •  隔離級別

對應數據庫中的隔離級別:http://www.cnblogs.com/bigshark/p/7912184.htmlspa

ISOLATION_DEFAULT代理

使用數據庫的隔離級別

ISOLATION_READ_UNCOMMITTED

未提交讀

ISOLATION_READ_COMMITTED

提交讀

ISOLATION_REPEATABLE_READ

可重複讀-Mysql默認級別

ISOLATION_SERIALIZABLE

可串行化

  • 傳播行爲

PROPAGATION_REQUIRED

方法必須運行在事務中,若是當前事務存在,方法會在當前事務運行,不然啓動一個新事務。

PROPAGATION_SUPPORTS

方法不須要事務上下文,可是若是存在當前事務,則會在這個事務中運行。

PROPAGATION_MANDATORY

方法必須運行在事務中,若是當前事務不存在,則拋出異常。

PROPAGATION_REQUIRES_NEW

方法必須運行它本身的事務中,若是存在當前事務,事務將被掛起。

PROPAGATION_NOT_SUPPORTED

方法不該該運行在事務中,若是存在當前事務,事務將被掛起。

PROPAGATION_NEVER

方法不該該運行在事務上下文中,若是當前有事務在運行,則拋出異常。

PROPAGATION_NESTED

若是當前已經存在一個事物,方法會在嵌套事務中運行,嵌套事務能夠獨立提交或回滾;若是不存在事務,其行爲和PROPAGATION_REQUIRED同樣。

  • 超時設置setTimeout(int timeout),默認-1
  • 是否只讀setReadOnly(boolean readOnly),默認false,事務告知對數據庫只進行讀操做,數據庫能夠利用事務的只讀特性進行一些優化。
  • 回滾規則execute(TransactionCallback<T> action)。

二、TransactionStatus提供全部事務API通用的,用來控制事務執行和事務狀態查詢的簡單方法

 1 public interface TransactionStatus extends SavepointManager {
 2 
 3     boolean isNewTransaction();
 4 
 5     boolean hasSavepoint();
 6 
 7     void setRollbackOnly();
 8 
 9     boolean isRollbackOnly();
10 
11     void flush();
12 
13     boolean isCompleted();
14 
15 }

三、PlatformTransactionManager的使用須要應用DataSource數據源,DataSourceTransactionManager支持JDBC和MyBatis場景。

1 <bean id="txManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
2     <property name="dataSource" ref="dataSource"/>
3 </bean>

Spring的聲明式事務是經過Spring AOP實現的。

調用事務代理的方法的過程:

 

 

Spring提供兩種編程式事務的方法:TransactionTemplate、PlatformTransactionManager

 

資料

Spring官方文檔

《Spring In Action》

相關文章
相關標籤/搜索