国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 學院 > 開發設計 > 正文

淺析Spring提供的事務管理方法

2019-11-18 11:10:30
字體:
來源:轉載
供稿:網友

  SPRing提供的事務治理可以分為兩類:編程式的和聲明式的。編程式的,比較靈活,但是代碼量大,存在重復的代碼比較多;而聲明式的比編程式的更靈活方便。本文將討論這兩種事務治理的區別。

  傳統的JDBC事務治理

  以往使用JDBC進行數據操作時,一般采用DataSource,從數據源中得到Connection,我們知道數據源是線程安全的,而連接不是線程安全的,所以對每個請求都是從數據源中重新取出一個連接。一般的數據源由容器進行治理,包括連接池。例如TOMCAT,WEBSPHERE,WEBLOGIC等這些J2EE商業容器都提供了這個功能。

  以往的我們使用JDBC在寫代碼時,事務治理可能會是這樣:

Connection conn = null;
try
{
 conn = DBConnectionFactory.getConnection;
 conn.setAutoCommit(false);
 //do something
 conn.commit(); //commit transcation
}
catch(Exception e)
{
 conn.rollback();
 //do sth
}
finally
{
 try
 {
  conn.close();
 }
 catch(SQLException se){ //do sth.}
 //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);
try
{
 //do sth
 transactionManager.commit(ts);
}
catch(Exception e){transactionManager.rollback(ts);}
  使用spring提供的事務模板TransactionTemplate

void add()
{
 transactionTemplate.execute( new TransactionCallback(){
  pulic Object doInTransaction(TransactionStatus ts)
  { //do sth}
 }
}
  TransactionTemplate也是為我們省去了部分事務提交、回滾代碼;定義事務模板時,需注入事務治理對象.

  Spring聲明式事務處理

  Spring聲明式事務處理也主要使用了ioc,aop思想,提供了TransactionInterceptor攔截器和常用的代理類TransactionProxyFactoryBean,可以直接對組件進行事務代理。

  使用TransactionInterceptor步驟

  1.定義數據源,事務治理類

  2.定義事務攔截器,sUCh as:

<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



發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 无为县| 东辽县| 乌恰县| 达孜县| 措勤县| 肇庆市| 宜宾市| 巴南区| 神池县| 海阳市| 武乡县| 巴南区| 迭部县| 新竹市| 河东区| 保定市| 祁东县| 巴中市| 惠东县| 丰县| 营口市| 嘉兴市| 霍林郭勒市| 韶山市| 海原县| 商河县| 泽库县| 寿光市| 宜昌市| 志丹县| 沙河市| 隆回县| 扎囊县| 泰来县| 阳春市| 博白县| 图们市| 屏东市| 淳安县| 尼勒克县| 昭觉县|