|
1、我先要給大家講一個概念:spring 的多數(shù)據(jù)源事務(wù),這是民間的說法。官方的說法是:spring 的分布式事務(wù)。明白了這個概念,問題就好解決了。
2、分布式事務(wù)的應(yīng)用場景:工程中使用兩個及以上數(shù)據(jù)庫中,就要考慮使用分布式事務(wù)管理,否則事務(wù)不能回滾。
3、現(xiàn)有兩種開源的第三方j(luò)ar支持spring的分布式事務(wù)管理,它們分別是:jotm和Atomikos。通過google可以找到下載的鏈接,其中atomikos的下載需要先填寫email信息,再登錄email找到鏈接去下載。下載地址分別:
1、http://jotm./
2、http://www./Main/InstallingTransactionsEssentials
我使用的是jotm。
4、基于spring+ibatis的環(huán)境下配置jotm的方法很簡單。只城要修改spring數(shù)據(jù)源的配置及事務(wù)的配置及可。以下是我的配置,供參考。
-
- <bean id="jotm" class="org.springframework.transaction.jta.JotmFactoryBean">
- <property name="defaultTimeout" value="500000"/>
- </bean>
-
- <bean id="dataSource" class="org.enhydra.jdbc.pool.StandardXAPoolDataSource" destroy-method="shutdown">
- <property name="dataSource">
- <bean class="org.enhydra.jdbc.standard.StandardXADataSource" destroy-method="shutdown">
- <property name="transactionManager" ref="jotm"/>
- <property name="driverName" value="${driverClass}"/>
- <property name="url" value="${jdbcUrl}"/>
- </bean>
- </property>
- <property name="user" value="${user}"/>
- <property name="password" value="${password}"/>
- </bean>
-
- <bean id="dataSourceBbs" class="org.enhydra.jdbc.pool.StandardXAPoolDataSource" destroy-method="shutdown">
- <property name="dataSource">
- <bean class="org.enhydra.jdbc.standard.StandardXADataSource" destroy-method="shutdown">
- <property name="transactionManager" ref="jotm"/>
- <property name="driverName" value="${bbs.driverClass}"/>
- <property name="url" value="${bbs.jdbcUrl}"/>
- </bean>
- </property>
- <property name="user" value="${bbs.user}"/>
- <property name="password" value="${bbs.password}"/>
- </bean>
-
- <!-- JTA事務(wù)管理器 -->
- <bean id="myJtaManager" class="org.springframework.transaction.jta.JtaTransactionManager">
- <property name="userTransaction" ref="jotm" />
- </bean>
-
- <!-- 事務(wù)切面配置 -->
- <aop:config>
- <aop:pointcut id="serviceOperation" expression="execution(* com.bohai.service.impl.*.*(..))"/>
- <aop:advisor pointcut-ref="serviceOperation" advice-ref="txAdvice" order="0" />
- </aop:config>
-
- <!-- 通知配置 -->
- <tx:advice id="txAdvice" transaction-manager="myJtaManager">
- <tx:attributes>
- <tx:method name="delete*" propagation="REQUIRED" />
- <tx:method name="save*" propagation="REQUIRED" />
- <tx:method name="update*" propagation="REQUIRED" />
- <tx:method name="*" propagation="REQUIRED" />
- <tx:method name="find*" propagation="SUPPORTS" read-only="true"/>
- <tx:method name="get*" propagation="SUPPORTS" read-only="true"/>
- <tx:method name="fetch*" propagation="SUPPORTS" read-only="true"/>
- <tx:method name="*_noTrans" propagation="NOT_SUPPORTED"/>
- </tx:attributes>
- </tx:advice>
5、jtom 還需要一個配置文件 carol.properties ,內(nèi)容是:
- # do not use CAROL JNDI wrapper
- carol.start.jndi=false
-
- # do not start a name server
- carol.start.ns=false
-
- # Naming Factory
- carol.jndi.java.naming.factory.url.pkgs=org.apache.naming
文件放在classpath下面,也就是src下面。
6、需要jtom的以下jar:
7、經(jīng)過測試,配置是成功的。事務(wù)可以回滾。
|