spring + ibatis 多數據源事務(分佈式事務)管理配置方法(轉)

一、我先要給你們講一個概念:spring 的多數據源事務,這是民間的說法。官方的說法是:spring 的分佈式事務。明白了這個概念,問題就好解決了。 java

二、分佈式事務的應用場景:工程中使用兩個及以上數據庫中,就要考慮使用分佈式事務管理,不然事務不能回滾。 web

三、現有兩種開源的第三方jar支持spring的分佈式事務管理,它們分別是:jotm和Atomikos。經過google能夠找到下載的連接,其中atomikos的下載須要先填寫email信息,再登陸email找到連接去下載。下載地址分別: spring

一、http://jotm.objectweb.org/ 數據庫

二、http://www.atomikos.com/Main/InstallingTransactionsEssentials express

我使用的是jotm。 服務器

四、基於spring+ibatis的環境下配置jotm的方法很簡單。只城要修改spring數據源的配置及事務的配置及可。如下是個人配置,供參考。 分佈式

<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事務管理器 -->
<bean id="myJtaManager" class="org.springframework.transaction.jta.JtaTransactionManager">
        <property name="userTransaction" ref="jotm" />
</bean> 

 <!-- 事務切面配置 -->
 <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>
五、jtom 還須要一個配置文件 carol.properties ,內容是:
#JNDI調用協議
carol.protocols=jrmp
#不使用CAROL JNDI封裝器        
carol.start.jndi=false
#不啓動命名服務器
carol.start.ns=false

 

文件放在classpath下面,也就是src下面。 測試

六、須要jtom的如下jar: fetch

 

七、通過測試,配置是成功的。事務能夠回滾。 google

相關文章
相關標籤/搜索