在使用spring進行資料庫事務管理時,不管是採用jdbc還是hibernate都必須處理好如何獲取鏈結的問題,不能過簡單使用getsession(),和 ds.getconnect()來獲取資料連線,否則鏈結一次請求訪問就會耗用多個資料連線.
xml配置(省略,網上有很多相關的資料)
基礎dao
public class genericdao
//獲得session
protected session getsession()
......
}org.springframework.jdbc.datasource.datasourcetransactionmanager
class="org.apache.commons.dbcp.basicdatasource"
destroy-method="close">
value="com.mysql.jdbc.driver">
class="org.springframework.jdbc.datasource.datasourcetransactionmanager">
基礎的資料服務層片段:
public abstract class abstractservicebase
/*** 獲取乙個預設的資料連線
* @return
* @throws sqlexception
*/public connection getconnection()catch(exception ex) }
} 為什麼會發生這樣的事情?,那麼這個跟spring的事務處理機制 有關係:
spring事務處理基本原理,主要是通過**類來完成,以org.springframework.jdbc.datasource.datasourcetransactionmanager.class為例用偽**進行說明:
1.採用執行緒本地變數儲存要進行事務控制的connection
class transactioncontext
public void commint()//關閉執行緒內的所有連線
public void rollback()回滾所有連線
} 2.生成datasource的**類
class datasourceproxy implements datasource
}3.對具體的服務類訪問使用**類進行訪問
calss serviceproxy implemens servicecatch(exception ex)}}
所以,使用spring 事務管理,必須自己去處理資料連線的唯一性。
Spring事務(一) Spring事務的使用
事務的經典舉例 某人要在商店使用電子貨幣購買100元的東西,當中至少包括兩個操作 該人賬戶減少100元 商店賬戶增加100元 事務就是要確保以上兩個操作 都能完成 或者 一起取消,否則就會出現100元平白消失或出現的情況。摘自wiki spring事務有兩種方式 程式設計式事務管理 宣告式事務管理 ...
spring的事務如何配置
1.spring的事務如何配置 spring的宣告式事務配置 1.class org.springframework.orm.hibernate3.localsessionfactorybean web inf classes hibernate.cfg.xml 2.配置事務管理器 class or...
spring是如何控制事務的?
spring 的事務,可以說是 spring aop 的一種實現。aop面向切面程式設計,即在不修改源 的情況下,對原有功能進行擴充套件,通過 類來對具體類進行操作。spring是乙個容器,通過spring這個容器來對物件進行管理,根據配置檔案來實現spring對物件的管理。spring的事務宣告有...