Java事务(八) - 分布式事务 - spring + JTA + atomikos
一. 前言:
上一篇博客中,我们使用jotm实现了分布式事务, 本篇将使用atomikos实现。
基本的代码都是一样的,就是配置略有不同。
二. 代码实现:
1. 代码结构图:
2. 配置文件:ApplicationContext.xml
<?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:aop="http://www.springframework.org/schema/aop" xmlns:tx="http://www.springframework.org/schema/tx" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx.xsd http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop.xsd"> <!-- 数据库1 --> <bean id="db1" class="com.atomikos.jdbc.SimpleDataSourceBean" init-method="init" destroy-method="close"> <property name="uniqueResourceName"> <value>mysql/main</value> </property> <property name="xaDataSourceClassName"> <value>com.mysql.jdbc.jdbc2.optional.MysqlXADataSource</value> </property> <property name="xaDataSourceProperties"> <value>URL=jdbc:mysql://localhost:3306/user?useUnicode=true&characterEncoding=utf-8;user=root;password=root</value> </property> <property name="exclusiveConnectionMode"> <value>true</value> </property> <property name="connectionPoolSize"> <value>3</value> </property> <property name="validatingQuery"> <value>SELECT 1</value> </property> </bean> <!-- 数据库2 --> <bean id="db2" class="com.atomikos.jdbc.SimpleDataSourceBean" init-method="init" destroy-method="close"> <property name="uniqueResourceName"> <value>mysql/secondary</value> </property> <property name="xaDataSourceClassName"> <value>com.mysql.jdbc.jdbc2.optional.MysqlXADataSource</value> </property> <property name="xaDataSourceProperties"> <value>URL=jdbc:mysql://localhost:3306/log?useUnicode=true&characterEncoding=utf-8;user=root;password=root</value> </property> <property name="exclusiveConnectionMode"> <value>true</value> </property> <property name="connectionPoolSize"> <value>3</value> </property> <property name="validatingQuery"> <value>SELECT 1</value> </property> </bean> <bean id="userTransactionManager" init-method="init" destroy-method="close" class="com.atomikos.icatch.jta.UserTransactionManager"> <property name="forceShutdown" value="true" /> </bean> <bean id="userTransactionImp" class="com.atomikos.icatch.jta.UserTransactionImp"> <property name="transactionTimeout" value="300"/> </bean> <bean id="jtaTransactionManager" class="org.springframework.transaction.jta.JtaTransactionManager"> <property name="transactionManager" ref="userTransactionManager" /> <property name="userTransaction" ref="userTransactionImp" /> <property name="allowCustomIsolationLevels" value="true"/> </bean> <!-- 配置事务传播特性 --> <tx:advice id="txAdvice" transaction-manager="jtaTransactionManager"> <tx:attributes> <tx:method name="save*" propagation="REQUIRED" rollback-for="Exception"/> <tx:method name="add*" propagation="REQUIRED" rollback-for="Exception"/> <tx:method name="create*" propagation="REQUIRED" rollback-for="Exception"/> <tx:method name="insert*" propagation="REQUIRED" rollback-for="Exception"/> <tx:method name="del*" propagation="REQUIRED" rollback-for="Exception"/> <tx:method name="update*" propagation="REQUIRED" rollback-for="Exception"/> <tx:method name="*" read-only="true"/> </tx:attributes> </tx:advice> <!-- 事务管理 --> <aop:config proxy-target-class="true"> <aop:advisor pointcut="execution(* com.zdp.service..*.*(..))" advice-ref="txAdvice"/> </aop:config> <bean id="userDao" class="com.zdp.dao.UserDao"> <property name="dataSource" ref="db1" /> </bean> <bean id="logDao" class="com.zdp.dao.LogDao"> <property name="dataSource" ref="db2" /> </bean> <bean id="userService" class="com.zdp.service.UserService"> <property name="userDao" ref="userDao" /> <property name="logDao" ref="logDao" /> </bean> </beans>
其他的代码请参见上一篇博客。
源码下载: http://download.csdn.net/detail/zdp072/7950391
郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。