使用spring+atomikos+ibatis实现声明式DB2多数据库全局分布式事务,关键是DB2数据库驱动程序和数据库访问参数的配置。db2的jdbc driver有好几种,不同的driver,参数的写法也不同,甚至端口也不一样,而且本人使用的DB2 V8.2驱动程序db2jcc.jar有bug,必须使用fp12版本的db2jcc.jar代替,才能实现全局分布式事务
atomikos官网上没有提供DB2的配置示例,试了多次,以下配置终于搞定了全局分布式事务,见其中的注释
<tx:advice id="txAdvice" transaction-manager="txManager">
<tx:attributes>
<tx:method name="get*" read-only="true" />
<tx:method name="*" rollback-for="Throwable"/>
</tx:attributes>
</tx:advice>
<!-- 在类foo.bar.MyClass的myMethod()方法里实现全局分布式事务,该方法对两个数据源进行操作 -->
<aop:config>
<aop:pointcut id="myOperation"
expression="execution(*foo.bar.MyClass.myMethod(..))" />
<aop:advisor advice-ref="txAdvice"
pointcut-ref="myOperation" />
</aop:config>
<!-- 数据源1 -->
<bean id="dataSource"
class="com.atomikos.jdbc.AtomikosDataSourceBean">
<property name="uniqueResourceName">
<value>app/main</value>
</property>
<property name="xaDataSourceClassName">
<value>[b]com.ibm.db2.jcc.DB2XADataSource[/b]</value>
</property>
<property name="xaProperties">
<props>
[b]<prop key="serverName">172.160.1.138</prop>
<prop key="portNumber">50000</prop>
<prop key="databaseName">MYDB</prop>
<prop key="user">db2admin</prop>
<prop key="password">pass</prop>
<prop key="driverType">4</prop>[/b]
</props>
</property>
<property name="poolSize">
<value>5</value>
</property>
</bean>
<!-- 数据源2 -->
<bean id="dataSourceHis"
class="com.atomikos.jdbc.AtomikosDataSourceBean">
<property name="uniqueResourceName">
<value>app/history</value>
</property>
<property name="xaDataSourceClassName">
<value>com.ibm.db2.jcc.DB2XADataSource</value>
</property>
<property name="xaProperties">
<props>
<prop key="serverName">172.160.1.139</prop>
<prop key="portNumber">50000</prop>
<prop key="databaseName">NDB</prop>
<prop key="user">db2admin</prop>
<prop key="password">pass</prop>
<prop key="driverType">4</prop>
</props>
</property>
<property name="poolSize">
<value>5</value>
</property>
</bean>
<!-- 数据源1的iBatis sqlMapClient -->
<bean id="sqlMapClient1"
class="org.springframework.orm.ibatis.SqlMapClientFactoryBean">
<property name="configLocation">
<value>SqlMapConfig.xml</value>
</property>
<property name="dataSource">
<ref bean="dataSource" />
</property>
</bean>
<!-- 数据源2的iBatis sqlMapClient -->
<bean id="sqlMapClient2"
class="org.springframework.orm.ibatis.SqlMapClientFactoryBean">
<property name="configLocation">
<value>SqlMapConfig.xml</value>
</property>
<property name="dataSource">
<ref bean="dataSourceHis" />
</property>
</bean>
<bean id="atomikosTransactionManager"
class="com.atomikos.icatch.jta.UserTransactionManager"
init-method="init" destroy-method="close">
<property name="forceShutdown">
<value>true</value>
</property>
</bean>
<bean id="atomikosUserTransaction"
class="com.atomikos.icatch.jta.UserTransactionImp">
<property name="transactionTimeout" value="240" />
</bean>
<bean id="txManager"
class="org.springframework.transaction.jta.JtaTransactionManager">
<property name="transactionManager">
<ref bean="atomikosTransactionManager" />
</property>
<property name="userTransaction">
<ref bean="atomikosUserTransaction" />
</property>
</bean>
<-- 访问数据源1的dao -->
<bean id="dao1" class="foo.bar.dao.My1DAOImpl">
<property name="sqlMapClient">
<ref bean="sqlMapClient" />
</property>
</bean>
<-- 访问数据源2的dao -->
<bean id="dao2" class="foo.bar.dao.My2DAOImpl">
<property name="sqlMapClient">
<ref bean="sqlMapClientHis" />
</property>
</bean>
iBatis的配置没有特殊的地方,使用abator for iBatis自动生成,abatorConfig.xml里daoGenerator的type属性设置为'SPRING'
分享到:
相关推荐
在Spring中集成Atomikos,可以实现全局的分布式事务管理,确保在分布式环境下的数据一致性。 4. **配置多数据源** 在Spring的XML配置文件中,我们需要为每个数据源创建一个`AtomikosDataSourceBean`实例,并配置...
本文将深入探讨如何使用Spring、MyBatis和Atomikos实现JTA分布式事务。 首先,让我们理解JTA的概念。Java Transaction API(JTA)是Java EE规范之一,用于处理分布式环境中的事务。它允许应用程序在不同的资源管理...
本教程将探讨如何结合Spring和Atomikos来实现分布式事务。 首先,我们需要理解什么是分布式事务。在分布式环境中,事务跨越多个资源管理器,如数据库或消息队列。为了确保ACID(原子性、一致性、隔离性和持久性)...
使用spring + atomikos+druid配置的分布式事务demo,两种数据源配置方式都可以,使用junit测试没问题,案例中使用的mysql数据库是8.0.11版本,版本不同请自行修改pom.xml和jdbc.properties
本文将深入探讨如何使用Spring、JTA和Atomikos来实现分布式事务。 首先,了解JTA的基本概念。JTA定义了一套规范,允许在多资源环境下进行事务管理,比如跨越多个数据库或者消息队列的服务。它包括三个主要组件:...
本示例"spring+atomikos+druid分布式事务Demo"聚焦于如何在Spring框架中利用Atomikos和Druid来处理分布式事务。接下来,我们将深入探讨这三个组件以及它们在实现分布式事务中的作用。 Spring是一个广泛使用的Java...
本教程将探讨如何利用Spring Boot、Druid、Mybatis以及Atomikos来配置多数据源并实现分布式事务。 首先,Spring Boot是Java生态系统中的一个流行框架,它简化了设置和配置过程,使得开发人员可以快速启动新项目。在...
在Spring 4.1.7版本中,我们可以利用其声明式事务管理来简化分布式事务的实现。通过配置@Transactional注解,可以在方法级别声明事务边界,Spring会自动管理事务的开始、提交或回滚。 Atomikos是一款开源的事务管理...
本项目"java+spring+mybatis+mysql+RuoYi-atomikos-实现分布式事务.zip"是一个基于若依(RuoYi)框架改造的多模块分布式事务解决方案,它利用了Atomikos这一强大的分布式事务管理器。以下将详细解析这个项目的知识点...
2. 集成Atomikos:在Spring配置中引入Atomikos的事务管理器,配置全局事务超时、事务日志路径等参数,确保Atomikos可以在多数据源环境下正确处理分布式事务。 3. 配置MyBatis:将MyBatis的SqlSessionFactory与...
将基于Spring4.1.7+atomikos+mybaits 实现两阶段的分布式事务处理,通过AOP面向切面实现动态实现数据源的切换 http://www.dczou.com/viemall/407.html
总结来说,"spring+jpa+atomikos多数据源"组合提供了强大的多数据库支持,使得应用程序能够在多个数据库间无缝切换和处理事务,这对于大型分布式系统来说至关重要。理解并掌握这些技术,对于提升软件开发的灵活性和...
本教程将聚焦于如何利用Spring 3.0、Hibernate ORM框架以及Atomikos这个开源事务管理器来实现高效、可靠的多数据源分布式事务处理。 **Spring 3.0**: Spring是Java开发中最广泛使用的轻量级框架之一,它提供了一个...
Spring Boot:mybatis-plus + atomikos + druid 实现不同实例数据库的多数据源配置和分布式事务管理(demo项目),想到工作上可能会用到多数据源,但是自己在这方面并不是很熟悉,于是在网上查阅了很多文章,结果...
在这个案例中,我们将深入探讨如何使用Spring 4与Atomikos来实现跨数据库的分布式事务管理。 Atomikos是一款开源的事务处理监控器(Transaction Processing Monitor,TPM),它支持JTA(Java Transaction API)标准...
本项目“springboot+jta+atomikos”旨在利用Spring Boot框架、Java Transaction API (JTA) 和 Atomikos 这一开源事务管理器来实现分布式事务的统一管理。下面将详细阐述这三个关键组件以及它们如何协同工作。 **...
本案例主要探讨如何利用Spring Boot、Atomikos、JTA(Java Transaction API)、Hibernate以及MyBatis,结合MySQL数据库,实现一个跨数据源的分布式事务解决方案。 首先,Spring Boot是一个基于Spring框架的快速开发...
本文将详细讲解如何利用Spring Boot、Atomikos、JPA(Java Persistence API)以及MySQL来实现JTA(Java Transaction API)分布式事务。 首先,Spring Boot是一个轻量级的框架,它简化了基于Spring的应用程序开发...
SpringBoot+Mybatis+Atomikos+Mysql+Oracle 多数据源分布式事物后台搭建 完整demo包,直接下下来解压,数据库配成自己的库,表自己的表,修改下脚本直接跑,网上大把资料,没一个能直接用的,这里花了点时间稍做...
本项目使用Spring Boot、Atomikos、JTA(Java Transaction API)、Hibernate和MySQL来实现分布式事务处理和多数据源管理,以确保在多个数据库操作之间保持事务的ACID特性。 首先,Spring Boot作为微服务开发的主流...