Spring框架的事務管理及應用

2021-04-20 15:32:27 字數 3179 閱讀 7238

spring提供的事務管理可以分為兩類:程式設計式的和宣告式的。程式設計式的,比較靈活,但是**量大,存在重複的**比較多;而宣告式的比程式設計式的更靈活方便。本文將討論這兩種事務管理的區別。

傳統的jdbc事務管理

以往使用jdbc進行資料操作時,一般採用datasource,從資料來源中得到connection,我們知道資料來源是執行緒安全的,而連線不是執行緒安全的,所以對每個請求都是從資料來源中重新取出乙個連線。一般的資料來源由容器進行管理,包括連線池。例如tomcat,websphere,weblogic等這些j2ee商業容器都提供了這個功能。

以往的我們使用jdbc在寫**時,事務管理可能會是這樣:

connection conn = null;

trycatch(exception e)

finally

catch(sqlexception se)

//close resultset,preparedstatement,connection

//notice:maybe ocurr exception when u close rs,pstmt,conn

}按照以往的思路來寫**,**量比較長,而且容易疏忽,忘掉一些try/catch,引發一些異常無法catch,雖然有時候我們會寫dbtool類,來關閉這些資源,並且保證在關閉這些資源時,不向外拋異常。

spring提供的程式設計式的事務處理

spring提供了幾個關於事務處理的類:

·transactiondefinition //事務屬性定義

·transcationstatus //代表了當前的事務,可以提交,回滾。

·platformtransactionmanager這個是spring提供的用於管理事務的基礎介面,其下有乙個實現的抽象類abstractplatformtransactionmanager,我們使用的事務管理類例如datasourcetransactionmanager等都是這個類的子類。

我們使用程式設計式的事務管理流程可能如下:

(1) 宣告資料來源。

(2) 宣告乙個事務管理類,例如:datasourcetransactionmanager,hibernatetransactionmanger,jtatransactionmanager等

(3) 在我們的**中加入事務處理**:

transactiondefinition td = new transactiondefinition();

transactionstatus ts = transactionmanager.gettransaction(td);

trycatch(exception e)

使用spring提供的事務模板transactiontemplate

void add()}}

transactiontemplate也是為我們省去了部分事務提交、回滾**;定義事務模板時,需注入事務管理物件.

spring宣告式事務處理

spring宣告式事務處理也主要使用了ioc,aop思想,提供了transactioninterceptor***和常用的**類transactionproxyfactorybean,可以直接對元件進行事務**。

使用transactioninterceptor的步驟:

(1)定義資料源,事務管理類

(2)定義事務***,例如:

<bean id = "transactioninterceptor" class="org.springframework.transaction.interceptor.transactioninterceptor">

<property name="transactionmanager"><ref bean="transactionmanager"/></property>

<property name="transactionattributesource">

<value>

com.test.usermanager.*r=propagation_required

</value>

</property>

</bean>

(3)為元件宣告乙個**類:proxyfactorybean

<bean id="usermanager" class="org.springframework.aop.framework.proxyfactorybean">

<property name="proxyinte***ces"><value>com.test.usermanager</value></property>

<property name="interceptornames">

<list>

<idref local="transactioninterceptor"/>

</list>

</property>

</bean>

使用transactionproxyfactorybean:

<bean id="usermanager" class="org.springframework.transaction.interceptor.transactionproxyfactorybean">

<property name="transactionmanager"><ref bean="transactionmanager"/></property>

<property name="target"><ref local="usermanagertarget"/></property>

<property name="transactionattributes">

<props>

<prop key="insert*">propagation_required</prop>

<prop key="update*">propagation_required</prop>

<prop key="*">propagation_required,readonly</prop>

</props>

</property>

</bean>

transactionproxyfactorybean只是為元件的事務**,如果我們要給元件新增一些業務方面的驗證等,可以使用transactiontemplate加***方式,為元件新增多個***,spring aop中提供了三類advice,即前增強,後增強,丟擲異常時的增強,可以靈活使用。

Spring框架 Spring的事務管理

有關事務的概念可以參考 mysql事務。spring當中事務管理的api介面 spring對事務的管理的方式 基於xml形式的事務管理 xmlns xmlns xsi xmlns aop xmlns context xmlns tx xsi schemalocation spring beans 3...

Spring框架(11) 事務管理

區域性事務是特定於乙個單一的事務資源,如乙個 jdbc 連線,而全域性事務可以跨多個事務資源事務,如在乙個分布式系統中的事務。區域性事務管理在乙個集中的計算環境中是有用的,該計算環境中應用程式元件和資源位於乙個單位點,而事務管理只涉及到乙個執行在乙個單一機器中的本地資料管理器。區域性事務更容易實現。...

Spring 框架系列之事務管理

1 事務回顧 1 什麼是事務 事務是邏輯上的一組操作,組成這組操作的各個邏輯單元,要麼一起成功,要麼一起失敗。2 事務特性 acid 3 事務併發安全性問題 4 事務隔離級別 5 常見資料庫預設事務隔離級別 2 spring 事務管理 1 基本事務操作 2 事務操作物件 spring 事務管理中提供...