`

spring+mybatis+Atomikos JTA事务配置说明

阅读更多

一、概览

Atomikos是一个公司名字,旗下最著名的莫过于其Atomikos的事务管理器产品。产品分两个:一个是开源的TransactionEssentials,一个是商业的ExtremeTransactions。

TransactionEssentials的主要特征:

  • JTA/XA 事务管理 —— 提供事务管理和连接池
  • 不需要应用服务器 —— TransactionEssentials可以在任何Java EE应用服务器中运行,也就是不依赖于任何应用服务器
  • 开源 —— TransactionEssentials是遵守Apache版本2许可的开源软件
  • 专注于JDBC/JMS —— 支持所有XA资源,但是资源池和消息监听是专供JDBC和JMS的
  • 与Spring 和 Hibernate 集成 —— 提供了描述如何与Spring和Hibernate集成的文档

ExtremeTransactions 是基于TransactionEssentials之上的,增加了对非XA事务的支持,在servlet容器中提供了图形化管理控制面板。Atomikos还提供了基于订阅的支持服务,一份订阅可以得到访问ExtremeTransactions中额外功能的权限。

 

二、什么是Atomikos TransactionsEssentials

Atomikos TransactionsEssentials 是一个为Java平台提供增值服务的并且开源类事务管理器,以下是包括在这个开源版本中的一些功能:

  • 全面崩溃 / 重启恢复
  • 兼容标准的SUN公司JTA API
  • 嵌套事务
  • 为XA和非XA提供内置的JDBC适配器
  • 内置的JMS适配器XA-capable JMS队列连接器
  • 通过XA API兼容第三方适配器
  • 更好的整合您的项目
  • 集成Hibernate、mybatis等

注释:XA:XA协议由Tuxedo首先提出的,并交给X/Open组织,作为资源管理器(数据库)与事务管理器的接口标准。目前,Oracle、Informix、DB2和Sybase等各大数据库厂家都提供对XA的支持。XA协议采用两阶段提交方式来管理分布式事务。XA接口提供资源管理器与事务管理器之间进行通信的标准接口。XA协议包括两套函数,以xa_开头的及以ax_开头的。

 

三、如何使用Atomikos TransactionsEssentials

 Atomikos TransactionsEssentials 是一个可靠的库,可以加入到您的Java应用程序,也就是说为了使用这个产品,您必须添加一些jar文件(包括在dist和lib文件夹下)到您的应用程序或者应用程序服务器。

请注意:Atomikos TransactionsEssentials是一个非常快速的嵌入式事务管理器,这就意味着,您不需要另外启动一个单独的事务管理器进程(不要查找任何的bin文件夹)。相反,您的应用服务器将有它自己的intra-VM事务管理器。

配置需求:至少Java1.5 jdk,并且最少128M的内存

性能优化:尽管这个软件有着很大的优势,但是想要更好的发挥其作用,可以按以下的方法优化:

  • 更高的内存,意味着更高的吞吐量(每秒的事务数目)
  • 使连接池尽可能的大
  • 一旦你不需要的连接请马上关闭它们。不要把你的应用程序放在缓存里,让内部连接池为你做这些,这将促使更高效的连接使用
  • 不要让活动的事务闲置:终止所有情况下的事务,尤其是在异常报错情况下的事务。这将减少数据库的锁定时间,并且最大效率的处理启用的使用。

值得注意的是,在我们所有的压力测试中,Atomikos TransactionsEssentials比J2EE的web容器更高效的吞吐量。这些测量值包括日志记录的高效的事务状态,同样,在我们所有的测量中,包括XA和non-XA,高效的效率是一样的。

 

四、spring+mybatis+ Atomikos实现JTA事务

1.环境

  • Spring3.1.3
  • mybatis3.2.2
  • Atomikos3.4.2
  • jdk1.6
  • mysql5.1.51

2.创建数据库环境,注意数据库引擎为InnoDB,只有这样才能支持事务

3.依赖jar包


 4.配置

jta.properties也可命名为transactions.properties。如果不配置这个文件,项目也能启动,因为几乎所有配置项都有默认值,最好还是配置了。

jta.properties:

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 = INFO 

 db.properties:

jdbc.xaDataSourceClassName=com.mysql.jdbc.jdbc2.optional.MysqlXADataSource
jdbc.url.a=jdbc:mysql://localhost:3306/trans_a?useUnicode=true&characterEncoding=utf-8&autoReconnect=true
jdbc.username.a=root
jdbc.password.a=
jdbc.uniqueResourceName.a=trans_a


jdbc.url.b=jdbc:mysql://localhost:3306/trans_b?useUnicode=true&characterEncoding=utf-8&autoReconnect=true
jdbc.username.b=root
jdbc.password.b=
jdbc.uniqueResourceName.b=trans_b


transactionManager.forceShutdown =true
transactionManager.transactionTimeout=3000


#*********************atomikos连接池参数设置*****************************
#连接池中保留的最小连接数
atomikos.minPoolSize=1
#连接池中保留的最大连接数 
atomikos.maxPoolSize=3
#最大空闲时间,60秒内未使用则连接被丢弃。若为0则永不丢弃。Default: 0 
atomikos.maxIdleTime=60

 applicationContext-a.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:context="http://www.springframework.org/schema/context"
	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-3.0.xsd
           http://www.springframework.org/schema/aop 
           http://www.springframework.org/schema/aop/spring-aop-3.0.xsd
           http://www.springframework.org/schema/tx
     	   http://www.springframework.org/schema/tx/spring-tx-3.0.xsd
           http://www.springframework.org/schema/context
           http://www.springframework.org/schema/context/spring-context-3.0.xsd">
	
		<!-- 数据库配置文件位置 -->
	<context:property-placeholder location="classpath:db.properties" />
	
	<bean id="dataSource" class="com.atomikos.jdbc.AtomikosDataSourceBean"
		init-method="init" destroy-method="close">
		<property name="uniqueResourceName" value="${jdbc.uniqueResourceName.a}" />
		<property name="xaDataSourceClassName" value="${jdbc.xaDataSourceClassName}" />
		<property name="xaProperties">
			<props>
				<prop key="user">${jdbc.username.a}</prop>
				<prop key="password">${jdbc.password.a}</prop>
				<prop key="URL">${jdbc.url.a}</prop>
			</props>
		</property>
		<property name="minPoolSize" value="${atomikos.minPoolSize}" />
		<property name="maxPoolSize" value="${atomikos.maxPoolSize}" />
		<property name="maxIdleTime" value="${atomikos.maxIdleTime}" />
	</bean>

	<!-- 采用注释的方式配置bean -->
	<context:annotation-config />
	
	<!-- 配置要扫描的包 -->
	<context:component-scan base-package="com.ssm"></context:component-scan>
	
	<!--proxy-target-class="true"强制使用cglib代理   如果为false则spring会自动选择-->
	<aop:aspectj-autoproxy  proxy-target-class="true"/>
	
	<!-- 配置mybitasSqlSessionFactoryBean -->
	<bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
		<property name="dataSource" ref="dataSource" />
		<property name="configLocation" value="classpath:mybatis-config.xml"></property>
	</bean>
	
	<!-- 配置SqlSessionTemplate -->
	<bean id="sqlSessionTemplate" class="org.mybatis.spring.SqlSessionTemplate">
	    <constructor-arg name="sqlSessionFactory" ref="sqlSessionFactory" />
	</bean>
	
	<bean id="atomikosTransactionManager" class="com.atomikos.icatch.jta.UserTransactionManager"
		init-method="init" destroy-method="close">
		<property name="forceShutdown" value="${transactionManager.forceShutdown}" />
	</bean>

	<bean id="atomikosUserTransaction" class="com.atomikos.icatch.jta.UserTransactionImp">
		<property name="transactionTimeout" value="${transactionManager.transactionTimeout}" />
	</bean>

	<bean id="transactionManager"
		class="org.springframework.transaction.jta.JtaTransactionManager">
		<property name="transactionManager">
			<ref bean="atomikosTransactionManager" />
		</property>
		<property name="userTransaction">
			<ref bean="atomikosUserTransaction" />
		</property>
	</bean>
	
	<!-- 使用annotation注解方式配置事务 -->
	<tx:annotation-driven transaction-manager="transactionManager"/>

</beans>

 applicationContext-b.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:context="http://www.springframework.org/schema/context"
	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-3.0.xsd
           http://www.springframework.org/schema/aop 
           http://www.springframework.org/schema/aop/spring-aop-3.0.xsd
           http://www.springframework.org/schema/tx
     	   http://www.springframework.org/schema/tx/spring-tx-3.0.xsd
           http://www.springframework.org/schema/context
           http://www.springframework.org/schema/context/spring-context-3.0.xsd">
	
		<!-- 数据库配置文件位置 -->
	<context:property-placeholder location="classpath:db.properties" />
	
	<bean id="dataSource_b" class="com.atomikos.jdbc.AtomikosDataSourceBean"
		init-method="init" destroy-method="close">
		<property name="uniqueResourceName" value="${jdbc.uniqueResourceName.b}" />
		<property name="xaDataSourceClassName" value="${jdbc.xaDataSourceClassName}" />
		<property name="xaProperties">
			<props>
				<prop key="user">${jdbc.username.b}</prop>
				<prop key="password">${jdbc.password.b}</prop>
				<prop key="URL">${jdbc.url.b}</prop>

			</props>
		</property>
		<property name="minPoolSize" value="${atomikos.minPoolSize}" />
		<property name="maxPoolSize" value="${atomikos.maxPoolSize}" />
		<property name="maxIdleTime" value="${atomikos.maxIdleTime}" />
	</bean>


	<bean id="sqlSessionFactory_b" class="org.mybatis.spring.SqlSessionFactoryBean">
		<property name="dataSource" ref="dataSource_b" />
		<property name="configLocation" value="classpath:mybatis-config.xml"></property>
	</bean>
	
	<!-- 配置SqlSessionTemplate -->
	<bean id="sqlSessionTemplate_b" class="org.mybatis.spring.SqlSessionTemplate">
	    <constructor-arg name="sqlSessionFactory" ref="sqlSessionFactory_b" />
	</bean>

</beans>

 

 

  • 大小: 66.2 KB
分享到:
评论

相关推荐

    Spring+MyBatis+Atomikos实现JTA分布式事务

    本文将深入探讨如何使用Spring、MyBatis和Atomikos实现JTA分布式事务。 首先,让我们理解JTA的概念。Java Transaction API(JTA)是Java EE规范之一,用于处理分布式环境中的事务。它允许应用程序在不同的资源管理...

    spring+mybatis+atomikos配置文件及相关包(最新版)

    本资源"spring+mybatis+atomikos配置文件及相关包(最新版)"提供了整合Spring、MyBatis和Atomikos的配置文件和相关库,以支持在分布式环境下的事务管理。下面将详细解释这三个组件以及它们在分布式事务中的作用。 ...

    spring+mybatis+atomikos配置文件及相关包

    同时,你需要在MyBatis的配置中启用JTA事务管理,确保Spring和Atomikos能够协同工作。这样,当你的应用执行跨库操作时,Atomikos会自动管理这些操作,保证其在分布式环境下的原子性、一致性、隔离性和持久性。 综上...

    spring+mybatis+atomikos配置文件及相关包.rar

    本篇文章将深入探讨如何在Spring框架中结合Mybatis和Atomikos进行分布式事务管理的配置与集成。Atomikos是一款强大的开源事务处理系统,它支持JTA(Java Transaction API),可以为我们的应用程序提供分布式事务解决...

    Spring+SpringMVC+MyBatis+Atomikos整合

    3. 配置MyBatis:将MyBatis的SqlSessionFactory与Spring集成,使用Atomikos提供的PlatformTransactionManager作为事务管理器,确保在分布式事务中的事务边界。 4. 分布式事务控制:在业务代码中,通过Spring的@...

    Spring Boot + Druid + Mybatis + Atomikos 配置多数据源 并支持分布式事务

    本教程将探讨如何利用Spring Boot、Druid、Mybatis以及Atomikos来配置多数据源并实现分布式事务。 首先,Spring Boot是Java生态系统中的一个流行框架,它简化了设置和配置过程,使得开发人员可以快速启动新项目。在...

    springboot+mybatis+jta+atomikos解决多数据源事务问题.pdf

    本篇文档主要讲述如何使用Spring Boot结合MyBatis、JTA(Java Transaction API)以及Atomikos实现多数据源的事务管理。 ### Spring Boot框架 Spring Boot是Spring家族中的一个全新框架,用于简化新Spring应用的...

    spring+mybatis+atomikos配置所需包跟配置文件

    综上所述,Spring、MyBatis和Atomikos的集成主要涉及JTA标准的运用、Atomikos的配置以及Spring的事务管理。通过这种方式,可以实现在分布式环境下的事务一致性,确保多数据源操作的正确性。在实际开发中,根据具体的...

    java+spring+mybatis+mysql+RuoYi-atomikos-实现分布式事务.zip

    本项目"java+spring+mybatis+mysql+RuoYi-atomikos-实现分布式事务.zip"是一个基于若依(RuoYi)框架改造的多模块分布式事务解决方案,它利用了Atomikos这一强大的分布式事务管理器。以下将详细解析这个项目的知识点...

    springboot + mybatis + atomikos 多数据源分布式事物管理

    Spring Boot、MyBatis 和 Atomikos 的结合提供了一种解决方案,用于处理多数据源的分布式事务管理。以下是对这个主题的详细阐述。 首先,Spring Boot 是一个基于 Spring 框架的轻量级开发工具,它简化了配置过程并...

    Spring Boot+Druid+Mybatis实现JTA分布式事务

    本教程将详细讲解如何使用Spring Boot、Druid和Mybatis来实现JTA(Java Transaction API)分布式事务。这是一项高级技术,它允许在多数据库环境或者微服务架构中进行一致性的数据操作。 首先,让我们了解什么是JTA...

    Spring boot+Atomikos+JTA+Hibernate+mybatis+MySQL实现分布式事务+多数据源

    本案例主要探讨如何利用Spring Boot、Atomikos、JTA(Java Transaction API)、Hibernate以及MyBatis,结合MySQL数据库,实现一个跨数据源的分布式事务解决方案。 首先,Spring Boot是一个基于Spring框架的快速开发...

    Spring+Mybatis+Atomikos实现JAVA初始化并控制多个数据源+分布式事务

    本DEMO展示了如何使用Spring框架、Mybatis持久层框架以及Atomikos事务管理器来实现这一目标。以下是对这个DEMO中涉及的技术点的详细说明。 首先,Spring框架作为Java领域中最受欢迎的IoC(Inversion of Control)和...

    spring3.0+struts2.0+mybatis3.2+jta+xapool配置文件示例

    本示例"spring3.0+struts2.0+mybatis3.2+jta+xapool配置文件"就是一个典型的Java企业级应用的集成框架,用于实现数据持久层、业务逻辑层以及控制层的整合。以下将详细介绍这些组件及其配置要点。 **Spring 3.0** 是...

    分布式事务操作之Spring+JTA+mybatis源码

    7. **源码分析**:在"Spring+JTA+Mybatis源码"中,你可以深入理解以下内容: - 如何在Spring配置文件中设置JTA事务管理器。 - MyBatis是如何与JTA配合进行事务控制的,比如在XML映射文件或Mapper接口中定义的事务...

    数据库插件 基于SpringBoot2.X+myBatis3.5+以上 集成了 atomikos 解决多数据源的动态切换.zip

    1. 配置文件:包含了SpringBoot的配置信息,如数据源配置、myBatis配置以及atomikos的事务管理配置。 2. 模型类:定义了与数据库交互的对象,包括字段和注解。 3. Mapper接口和XML文件:定义了SQL语句和结果映射,...

    springboot+mybatis+druid+atomikos 多数据源,分布式事务,集成websocket,redis,swagger2

    在本项目中,我们主要探讨的是如何利用Spring Boot、MyBatis、Druid、Atomikos、WebSocket、Redis以及Swagger2构建一个具有多数据源、分布式事务管理,并且集成了实时通信与API文档管理功能的高级应用。下面将对这些...

    Springboot+Atomikos+Jpa+Mysql实现JTA分布式事务

    本文将详细讲解如何利用Spring Boot、Atomikos、JPA(Java Persistence API)以及MySQL来实现JTA(Java Transaction API)分布式事务。 首先,Spring Boot是一个轻量级的框架,它简化了基于Spring的应用程序开发...

    spring、mybatis、atomikos实现多数据源事务demo

    在这些源码中,可以看到如何配置和使用Atomikos来管理多数据源,以及如何在Spring和MyBatis中定义和调用事务边界。 具体实现步骤可能包括以下部分: 1. 配置Atomikos:在Spring配置文件中引入Atomikos的相关依赖,...

Global site tag (gtag.js) - Google Analytics