http://www.iteye.com/topic/1113929
最近弄一个框架,使用spring3.0.5+mybatis3.0.5,需要访问多库,要应用分布式事务JTA,这是用atomikos 3.70版本,并把配置做一下记录。
配置多个数据源
- <!-- 第一个数据库 -->
- <bean id="dataSource" class="com.atomikos.jdbc.SimpleDataSourceBean"
- init-method="init" destroy-method="close">
- <property name="uniqueResourceName" value="mysql/main" />
- <property name="xaDataSourceClassName"
- value="com.mysql.jdbc.jdbc2.optional.MysqlXADataSource" />
- <property name="xaDataSourceProperties"
- value="URL=${jdbc.url.a};user=${jdbc.username.a};password=${jdbc.password.a}" />
- <property name="exclusiveConnectionMode" value="true" />
- <property name="connectionPoolSize" value="10" />
- <property name="validatingQuery">
- <value>SELECT 1</value>
- </property>
- </bean>
- <!-- 第二个数据库 -->
- <bean id="dataSourceB" class="com.atomikos.jdbc.SimpleDataSourceBean"
- init-method="init" destroy-method="close">
- <property name="uniqueResourceName" value="mysql/news" />
- <property name="xaDataSourceClassName"
- value="com.mysql.jdbc.jdbc2.optional.MysqlXADataSource" />
- <property name="xaDataSourceProperties"
- value="URL=${jdbc.url.b};user=${jdbc.username.b};password=${jdbc.password.b}" />
- <property name="exclusiveConnectionMode" value="true" />
- <property name="connectionPoolSize" value="10" />
- <property name="validatingQuery">
- <value>SELECT 1</value>
- </property>
- </bean>
配置mybatis的SessionFactory
- <bean id="sqlSessionFactoryB" class="org.mybatis.spring.SqlSessionFactoryBean">
- <property name="configLocation" value="classpath:mybatis/mybatis-config-b.xml" />
- <property name="dataSource" ref="dataSourceB" />
- </bean>
- <bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
- <property name="configLocation" value="classpath:mybatis/mybatis-config.xml" />
- <property name="dataSource" ref="dataSource" />
- </bean>
这里使用的是SessionFactory,不是org.springframework.orm.ibatis.SqlMapClientFactoryBean,在mybatis3中用SqlMapClientFactoryBean汇报com.ibatis.common.xml.NodeletException 异常。
configLocation 对应的mybatis配置,跟平时配置一样。
- <?xml version="1.0" encoding="UTF-8" ?>
- <!DOCTYPE configuration PUBLIC "-//mybatis.org//DTD Config 3.0//EN" "http://mybatis.org/dtd/mybatis-3-config.dtd">
- <configuration>
- <typeAliases>
- <typeAlias alias="User" type="com.lantii.domain.User"/>
- </typeAliases>
- <mappers>
- <mapper resource="com/lantii/dao/UserMapper.xml" />
- </mappers>
- </configuration>
事务这块用spring管理atomikos
- <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="300" />
- </bean>
- <bean id="springTransactionManager"
- class="org.springframework.transaction.jta.JtaTransactionManager">
- <property name="transactionManager">
- <ref bean="atomikosTransactionManager" />
- </property>
- <property name="userTransaction">
- <ref bean="atomikosUserTransaction" />
- </property>
- </bean>
- <aop:aspectj-autoproxy />
- <aop:config proxy-target-class="true">
- <aop:advisor pointcut="execution(* *com.lantii.service..*(..))"
- advice-ref="txAdvice" />
- </aop:config>
- <tx:advice id="txAdvice" transaction-manager="springTransactionManager">
- <tx:attributes>
- <tx:method name="get*" propagation="REQUIRED" read-only="true" />
- <tx:method name="find*" propagation="REQUIRED" read-only="true" />
- <tx:method name="has*" propagation="REQUIRED" read-only="true" />
- <tx:method name="locate*" propagation="REQUIRED" read-only="true" />
- <tx:method name="*" propagation="REQUIRED" rollback-for="Exception" />
- </tx:attributes>
- </tx:advice>
Mapper的管理及注入
- <bean id="userMapper" class="org.mybatis.spring.mapper.MapperFactoryBean">
- <property name="sqlSessionFactory" ref="sqlSessionFactory" />
- <property name="mapperInterface" value="com.lantii.dao.UserMapper" />
- </bean>
- <bean id="roleMapper" class="org.mybatis.spring.mapper.MapperFactoryBean">
- <property name="sqlSessionFactory" ref="sqlSessionFactoryB" />
- <property name="mapperInterface" value="com.lantii.dao.RoleMapper" />
- </bean>
- <bean id="userService" class="com.lantii.service.UserServiceImpl">
- <property name="userMapper" ref="userMapper" />
- <property name="roleMapper" ref="roleMapper" />
- </bean>
atomikos的配置jta.properties,该文件放在应用classpath下面
- com.atomikos.icatch.service=com.atomikos.icatch.standalone.UserTransactionServiceFactory
- com.atomikos.icatch.console_file_name = tm.out
- com.atomikos.icatch.log_base_name = tmlog
- com.atomikos.icatch.tm_unique_name = com.atomikos.spring.jdbc.tm
- com.atomikos.icatch.console_log_level=WARN
这几基本配置完毕,需要jar包
atomikos-util.jar
transactions.jar
transactions-jta.jar
transactions-jdbc-deprecated.jar
mybatis.jar
mybatis-spring.jar
cglib.2.2.2.jar
spring的jar包
在Service中,调用事务的方法不能try。。。catch事务的方法,否者不能回滚
如下带面就会出现不会滚问题
- try{
- userMapper.addUser(user);
- roleMapper.addRole(role);
- }catch(Exception){
- }
相关推荐
本文将深入探讨如何使用Spring、MyBatis和Atomikos实现JTA分布式事务。 首先,让我们理解JTA的概念。Java Transaction API(JTA)是Java EE规范之一,用于处理分布式环境中的事务。它允许应用程序在不同的资源管理...
本项目"java+spring+mybatis+mysql+RuoYi-atomikos-实现分布式事务.zip"是一个基于若依(RuoYi)框架改造的多模块分布式事务解决方案,它利用了Atomikos这一强大的分布式事务管理器。以下将详细解析这个项目的知识点...
1. 引入依赖:在项目中添加Atomikos的JTA实现和Spring的事务管理依赖。 2. 配置Atomikos:创建Atomikos的配置文件,设置事务管理器的属性,如事务超时时间、日志存储路径等。 3. 配置Spring:在Spring的配置文件中...
本教程主要关注如何将Spring、SpringMVC、MyBatis和Atomikos这四个组件进行整合,以实现多数据源的分布式事务处理。 首先,Spring是Java领域广泛应用的依赖注入(DI)和面向切面编程(AOP)框架,它允许开发者轻松...
同时,你需要在MyBatis的配置中启用JTA事务管理,确保Spring和Atomikos能够协同工作。这样,当你的应用执行跨库操作时,Atomikos会自动管理这些操作,保证其在分布式环境下的原子性、一致性、隔离性和持久性。 综上...
本篇文章将深入探讨如何在Spring框架中结合Mybatis和Atomikos进行分布式事务管理的配置与集成。Atomikos是一款强大的开源事务处理系统,它支持JTA(Java Transaction API),可以为我们的应用程序提供分布式事务解决...
本教程将探讨如何利用Spring Boot、Druid、Mybatis以及Atomikos来配置多数据源并实现分布式事务。 首先,Spring Boot是Java生态系统中的一个流行框架,它简化了设置和配置过程,使得开发人员可以快速启动新项目。在...
在Spring框架中结合MyBatis,Atomikos可以实现分布式事务的高效处理。以下将详细介绍如何配置Spring、MyBatis以及Atomikos以实现这一目标。 首先,理解JTA的重要性。JTA是Java平台上的标准接口,用于处理跨多个...
本篇文档主要讲述如何使用Spring Boot结合MyBatis、JTA(Java Transaction API)以及Atomikos实现多数据源的事务管理。 ### Spring Boot框架 Spring Boot是Spring家族中的一个全新框架,用于简化新Spring应用的...
本案例主要探讨如何利用Spring Boot、Atomikos、JTA(Java Transaction API)、Hibernate以及MyBatis,结合MySQL数据库,实现一个跨数据源的分布式事务解决方案。 首先,Spring Boot是一个基于Spring框架的快速开发...
然后,Atomikos 是一个开源的 JTA(Java Transaction API)实现,它支持分布式事务管理。在分布式系统中,当多个微服务或组件涉及到跨数据库的操作时,Atomikos 能够确保这些操作要么全部成功,要么全部回滚,遵循 ...
本DEMO展示了如何使用Spring框架、Mybatis持久层框架以及Atomikos事务管理器来实现这一目标。以下是对这个DEMO中涉及的技术点的详细说明。 首先,Spring框架作为Java领域中最受欢迎的IoC(Inversion of Control)和...
本教程将详细讲解如何使用Spring Boot、Druid和Mybatis来实现JTA(Java Transaction API)分布式事务。这是一项高级技术,它允许在多数据库环境或者微服务架构中进行一致性的数据操作。 首先,让我们了解什么是JTA...
NULL 博文链接:https://lizhao6210-126-com.iteye.com/blog/1958831
7. **源码分析**:在"Spring+JTA+Mybatis源码"中,你可以深入理解以下内容: - 如何在Spring配置文件中设置JTA事务管理器。 - MyBatis是如何与JTA配合进行事务控制的,比如在XML映射文件或Mapper接口中定义的事务...
atomikos是一款开源的事务处理中间件,它实现了JTA(Java Transaction API)和JTS(Java Transaction Service),用于处理分布式事务。在多数据源环境下,atomikos能够保证跨数据源操作的一致性和原子性,确保事务的...
Spring框架,MyBatis持久层框架,以及Atomikos这样的分布式事务协调器共同工作,可以帮助我们实现复杂的多数据源事务处理。这个“spring、mybatis、atomikos实现多数据源事务demo”就是为了解决这一问题而设计的。 ...
在本项目中,我们主要探讨的是如何利用Spring Boot、MyBatis、Druid、Atomikos、WebSocket、Redis以及Swagger2构建一个具有多数据源、分布式事务管理,并且集成了实时通信与API文档管理功能的高级应用。下面将对这些...
本示例中的"spring、mybatis、atomikos实现DB2、Mysql多数据源事务demo"提供了一个实用的框架,演示了如何在Spring框架中结合MyBatis持久层框架以及Atomikos事务管理器来处理来自DB2和MySQL两个不同数据库的数据源...
本示例"spring3.0+struts2.0+mybatis3.2+jta+xapool配置文件"就是一个典型的Java企业级应用的集成框架,用于实现数据持久层、业务逻辑层以及控制层的整合。以下将详细介绍这些组件及其配置要点。 **Spring 3.0** 是...