Spring 事務——事務管理器
事務管理器
Spring只是個容器,因此它並不做任何事務的具體實現。他只是提供了事務管理的介面PlatformTransactionManager,具體內容由就由各個事務管理器來實現。
Spring提供了許多內建事務管理器實現:
DataSourceTransactionManager:位於org.springframework.jdbc.datasource包中,資料來源事務管理器,提供對單個javax.sql.DataSource事務管理,用於Spring JDBC抽象框架、iBATIS或MyBatis框架的事務管理;
HibernateTransactionManager
JpaTransactionManager:位於org.springframework.orm.jpa包中,提供對單個javax.persistence.EntityManagerFactory事務支援,用於整合JPA實現框架時的事務管理;
JtaTransactionManager
JdoTransactionManager:位於org.springframework.orm.jdo包中,提供對單個javax.jdo.PersistenceManagerFactory事務管理,用於整合JDO框架時的事務管理;
OC4JjtaTransactionManager:位於org.springframework.transaction.jta包中,Spring提供的對OC4J10.1.3+應用伺服器事務管理器的介面卡,此介面卡用於對應用伺服器提供的高階事務的支援;
WebSphereUowTransactionManager:位於org.springframework.transaction.jta包中,Spring提供的對WebSphere 6.0+應用伺服器事務管理器的介面卡,此介面卡用於對應用伺服器提供的高階事務的支援;
WebLogicJtaTransactionManager:位於org.springframework.transaction.jta包中,Spring提供的對WebLogic8.1+應用伺服器事務管理器的介面卡,此介面卡用於對應用伺服器提供的高階事務的支援。
常用的事務管理器配置:
1、JDBC事務 (常用)
使用JDBC來進行持久化,DataSourceTransactionManager會為你處理事務邊界。在 MyBatis 中也常用JDBC事務管理器。
<!-- 介面PlatformTransactionMnager實現 -->
<bean id="txManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
<property name="dataSource" ref="dataSource" />
</bean>
<!-- 開啟事務註解支援 -->
<tx:annotation-driven transaction-manager="txManager" />
注意可以使用<tx:annotation-driven transaction-manager=“txManager” />開啟事務註解的支援(需要在xml檔案中引入tx名稱空間)
2、Hibernate事務
<bean id="transactionManager" class="org.springframework.orm.hibernate3.HibernateTransactionManager">
<property name="sessionFactory" ref="sessionFactory" />
</bean>
3、JPA事務(Java持久化API事務)
<bean id="transactionManager"class="org.springframework.orm.jpa.JpaTransactionManager">
<property name="entityManagerFactory"ref="entityManagerFactory"/>
</bean>
<bean id="entityManagerFactory"class="org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean" >
<property name="dataSource" ref="someDataSource"/>
</bean>
4、JTA事務(Java原生API事務)
<bean id="transactionManager" class="org.springframework.transaction.jta.JtaTransactionManager">
<property name="transactionManagerName" value="java:/TransactionManager" />
</bean>