Java事务(八) - 分布式事务 - spring + JTA + atomikos
2017-12-21 14:42
435 查看
来源:http://blog.csdn.net/zdp072/article/details/39440111
一. 前言:
上一篇博客中,我们使用jotm实现了分布式事务,
本篇将使用atomikos实现。
基本的代码都是一样的,就是配置略有不同。
二. 代码实现:
1. 代码结构图:
2. 配置文件:ApplicationContext.xml
[html] view
plain copy
<?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>
一. 前言:
上一篇博客中,我们使用jotm实现了分布式事务,
本篇将使用atomikos实现。
基本的代码都是一样的,就是配置略有不同。
二. 代码实现:
1. 代码结构图:
2. 配置文件:ApplicationContext.xml
[html] view
plain copy
<?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>
相关文章推荐
- java事务学习笔记(八)--分布式事务入门例子(Spring+JTA+Atomikos+Hibernate+JMS)
- Java事务(八) - 分布式事务 - spring + JTA + atomikos
- java分布式事务——spring+jta+atomikos
- Java事务(八) - 分布式事务 - spring + JTA + atomikos
- java事务全解析(八)--分布式事务入门例子(Spring+JTA+Atomikos+Hibernate+JMS
- 分布式事务入门例子(Spring+JTA+Atomikos+Hibernate+JMS)
- Java事务处理全解析(八)——分布式事务入门例子(Spring+JTA+Atomikos+Hibernate+JMS)
- 分布式事务入门-Spring+JTA+Atomikos+Hibernate+JMS
- Java事务之八——分布式事务(Spring+JTA+Atomikos+Hibernate+JMS)
- Java事务之八——分布式事务(Spring+JTA+Atomikos+Hibernate+JMS)
- 分布式事务入门例子(Spring+JTA+Atomikos+Hibernate+JMS)
- java分布式事务1—— spring + JTA + jotm
- Spring 3.0 + Atomikos构建jta分布式事务
- spring项目加入jta分布式事务的实现方式: Atomikos
- 10005---Java事务(七) - 分布式事务 - spring + JTA + jotm
- Atomikos Jta分布式事务spring集成实例
- Java事务处理全解析(八)——分布式事务入门例子(Spring+JTA+Atomikos+Hibernate+JMS)
- 分布式事务JTA之实践:Spring+ATOMIKOS
- 分布式事务JTA之实践:Spring+ATOMIKOS
- Java事务(七) - 分布式事务 - spring + JTA + jotm