文档章节

atomikos + druid + spring 多数据源分布式事务

我不说话
 我不说话
发布于 2016/07/08 17:37
字数 596
阅读 953
收藏 7
点赞 0
评论 0

1.atomikos相关jar包下载

官网下载:https://www.atomikos.com/Main/ExtremeTransactionsDownloadForm

下载地址:http://www.atomikos.com/Main/InstallingExtremeTransactions

transactions-4.0.3.EVAL.jar、transactions-api-4.0.3.EVAL.jar、transactions-jdbc-4.0.3.EVAL.jar、transactions-jta-4.0.3.EVAL.jar、atomikos-util-4.0.3.EVAL.jar,还需要jta-1.1.jar、druid-1.0.5.jar、spring-4.1.6

2.spring配置文件application-db.xml配置

<!--创建jdbc数据源 -->
	<bean id="dataSource" class="com.alibaba.druid.pool.xa.DruidXADataSource"
		init-method="init" destroy-method="close">
		<property name="driverClassName" value="${jdbc.driver}" />
		<property name="url" value="${jdbc.url}" />
		<property name="password" value="${jdbc.password}" />
		<property name="username" value="${jdbc.username}" />
	
		<!-- 配置初始化大小、最小、最大 -->
		<property name="initialSize" value="3" />
		<property name="minIdle" value="3" />
		<property name="maxActive" value="100" />
	
		<!-- 配置获取连接等待超时的时间 -->
		<property name="maxWait" value="60000" />
	
		<!-- 配置间隔多久才进行一次检测,检测需要关闭的空闲连接,单位是毫秒 -->
		<property name="timeBetweenEvictionRunsMillis" value="60000" />
	
		<!-- 配置一个连接在池中最小生存的时间,单位是毫秒 -->
		<property name="minEvictableIdleTimeMillis" value="300000" />
	
		<property name="validationQuery" value="SELECT 'x'" />
		<property name="testWhileIdle" value="true" />
		<property name="testOnBorrow" value="false" />
		<property name="testOnReturn" value="false" />
	
		<!-- 打开PSCache,并且指定每个连接上PSCache的大小(Oracle使用) <property name="poolPreparedStatements" 
			value="true" /> <property name="maxPoolPreparedStatementPerConnectionSize" 
			value="20" /> -->
	
		<!-- 配置监控统计拦截的filters -->
		<property name="filters" value="stat" />
	</bean>
	
	<bean class="com.atomikos.jdbc.AtomikosDataSourceBean" init-method="init" destroy-method="close" id="dataSource01">
		<property name="uniqueResourceName" value="cdc2" />
        <property name="xaDataSource" ref="dataSource"/>
    </bean>

	<!-- 官方教程:http://mybatis.github.io/mybatis-3/zh/index.html -->
	<!-- 创建SqlSessionFactory,同时指定数据源 -->
	<bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
		<property name="dataSource" ref="dataSource01" />
		<!-- <property name="mapperLocations" value="classpath:hello/mapper/*.xml"/> -->
		<property name="mapperLocations" value="classpath:com/hk/web/**/mapper/*.xml"/>
		<!-- <property name="typeAliasesPackage" value="com.tiantian.mybatis.model" /> -->
	</bean>
	
	<bean id="sqlSession" class="org.mybatis.spring.SqlSessionTemplate" scope="prototype">
       <constructor-arg index="0" ref="sqlSessionFactory" />
    </bean>
    
    <!--  -->
    <bean id="dataSource2" class="com.alibaba.druid.pool.xa.DruidXADataSource"
		init-method="init" destroy-method="close">
		<property name="driverClassName" value="${jdbc.driver2}" />
		<property name="url" value="${jdbc.url2}" />
		<property name="password" value="${jdbc.password2}" />
		<property name="username" value="${jdbc.username2}" />
	
		<property name="initialSize" value="3" />
		<property name="minIdle" value="3" />
		<property name="maxActive" value="100" />
	
		<property name="maxWait" value="60000" />
	
		<property name="timeBetweenEvictionRunsMillis" value="60000" />
		<property name="minEvictableIdleTimeMillis" value="300000" />
		<property name="validationQuery" value="SELECT 'x'" />
		<property name="testWhileIdle" value="true" />
		<property name="testOnBorrow" value="false" />
		<property name="testOnReturn" value="false" />
		<property name="filters" value="stat" />
	</bean>
	
	<bean class="com.atomikos.jdbc.AtomikosDataSourceBean" init-method="init" destroy-method="close" id="dataSource02">
		<property name="uniqueResourceName" value="cdc" />
        <property name="xaDataSource" ref="dataSource2"/>
    </bean>

	<bean id="sqlSessionFactory2" class="org.mybatis.spring.SqlSessionFactoryBean">
		<property name="dataSource" ref="dataSource02" />
		<property name="mapperLocations" value="classpath:com/hk/web/**/mapper/*.xml"/>
	</bean>
	
	<bean id="sqlSession2" class="org.mybatis.spring.SqlSessionTemplate" scope="prototype">
       <constructor-arg index="0" ref="sqlSessionFactory2" />
    </bean>
    
    <!-- atomikos事务管理器 -->  
    <bean id="atomikosTransactionManager" class="com.atomikos.icatch.jta.UserTransactionManager"
		init-method="init" destroy-method="close">
		<description>UserTransactionManager</description>
		<property name="forceShutdown">
			<value>true</value>
		</property>
	</bean>

	<bean id="atomikosUserTransaction" class="com.atomikos.icatch.jta.UserTransactionImp">
		<!-- 秒 -->
		<property name="transactionTimeout" value="300" />
	</bean>

	<!-- spring 事务管理器 -->
	<bean id="transactionManager"
		class="org.springframework.transaction.jta.JtaTransactionManager">
		<property name="transactionManager" ref="atomikosTransactionManager" />
		<property name="userTransaction" ref="atomikosUserTransaction" />
		<property name="allowCustomIsolationLevels" value="true" />
	</bean>

题外话:

有能力的可以去实现org.springframework.transaction.support.AbstractPlatformTransactionManager,代替org.springframework.jdbc.datasource.DataSourceTransactionManager

© 著作权归作者所有

共有 人打赏支持
我不说话
粉丝 10
博文 6
码字总数 1808
作品 0
济南
高级程序员
分布式事务开源解决方案用例版--hihsoft-atomikos

【组件价值】 Atomikos 是一款 Java/JTA 事务处理工具 与spring完美结合,实现配置化分布式事务 多数据源分布式事务的开源解决方案 跨平台,不受应用服务器限制 也是学习spring、mybatis、j...

平凡哥 ⋅ 2014/08/07 ⋅ 1

hihsoft/hihsoft-atomikos

#hihsoft-atomikos Atomikos分布式事务开源解决方案用例版 1.1框架简介 组件价值: 一Atomikos 是一款 Java/JTA 事务处理工具; 二与spring完美结合,实现配置化分布式事务 多数据源分布式事...

hihsoft ⋅ 2014/08/07 ⋅ 0

spring + ibatis 多数据源事务(分布式事务)管理配置方法(转)

1、我先要给大家讲一个概念:spring 的多数据源事务,这是民间的说法。官方的说法是:spring 的分布式事务。明白了这个概念,问题就好解决了。 2、分布式事务的应用场景:工程中使用两个及以...

IceRainYWC ⋅ 2012/12/17 ⋅ 2

spring 多数据源一致性事务方案

spring 多数据源配置 spring 多数据源配置一般有两种方案: 1、在spring项目启动的时候直接配置两个不同的数据源,不同的sessionFactory。在dao 层根据不同业务自行选择使用哪个数据源的ses...

纯洁的虫纸 ⋅ 2015/11/19 ⋅ 0

atomikos在Tomcat中无法正确执行

请教一个关于分布式事务的问题,项目中使用到了多数据源,导致普通的事务无效,在网上找到了atomikos可以帮助Tomcat完成多数据源事务,但是配置完成后我在junit测试中可以正确执行回滚,但是...

Lindp ⋅ 2015/06/17 ⋅ 0

spring项目加入jta分布式事务的实现方式: Atomikos

一、概述: 本文主要讲述如何基于Atomikos 和spring在项目中实现分布式事务管理 二、应用场景: 如果项目中的数据源来自多个数据库,同时又需要在多数据源中保证事务,此时就需要用到分布式事...

明舞 ⋅ 2015/12/10 ⋅ 3

推荐几个自己写的Java后端相关的范例项目(转载)

http://wosyingjun.iteye.com/blog/2312553 这里推荐几个自己写的范例项目,主要采用SSM(Spring+SpringMVC+Mybatis)框架,分布式架构采用的是(dubbo+zookeeper)。范例项目的好处是简单易...

指尖的舞者 ⋅ 2016/09/27 ⋅ 0

分布式事务 Spring+JTA+Atomikos+Hibernate+JMS

请通过以下方式下载github源代码: git clone https://github.com/davenkin/jta-atomikos-hibernate-activemq.git 本地事务和分布式事务的区别在于:本地事务只用于处理单一数据源事务(比如...

foxeye ⋅ 2016/03/17 ⋅ 0

关于分布式事务的实现

@黄勇 你好,想跟你请教个问题: 关于分布式事务的实现,之前在高手问答有请教过你,当时说的是用JTA实现。现在我这里的应用环境,服务的主体框架是Spring,按照JTA的实现我查到的信息是使用 ...

Kent_Chen ⋅ 2015/10/30 ⋅ 1

JTA分布式事务实践

最近一直在研究怎么实现分布式事务,花了不少时间,测试工程启停测试了无数次,最终实现的时候其实也就是写一些配置文件,对于工程代码没什么影响。目前研究还不是很深入,对于全面崩溃恢复如...

引鸩怼孑 ⋅ 2016/04/27 ⋅ 0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

win10怎么彻底关闭自动更新

win10自带的更新每天都很多,每一次下载都要占用大量网络,而且安装要等得时间也蛮久的。 工具/原料 Win10 方法/步骤 单击左下角开始菜单点击设置图标进入设置界面 在设置窗口中输入“服务”...

阿K1225 ⋅ 今天 ⋅ 0

Elasticsearch 6.3.0 SQL功能使用案例分享

The best elasticsearch highlevel java rest api-----bboss Elasticsearch 6.3.0 官方新推出的SQL检索插件非常不错,本文一个实际案例来介绍其使用方法。 1.代码中的sql检索 @Testpu...

bboss ⋅ 今天 ⋅ 0

informix数据库在linux中的安装以及用java/c/c++访问

一、安装前准备 安装JDK(略) 到IBM官网上下载informix软件:iif.12.10.FC9DE.linux-x86_64.tar放在某个大家都可以访问的目录比如:/mypkg,并解压到该目录下。 我也放到了百度云和天翼云上...

wangxuwei ⋅ 今天 ⋅ 0

PHP语言系统ZBLOG或许无法重现月光博客的闪耀历史[图]

最近在写博客,希望通过自己努力打造一个优秀的教育类主题博客,名动江湖,但是问题来了,现在写博客还有前途吗?面对强大的自媒体站点围剿,还有信心和可能型吗? 至于程序部分,我选择了P...

原创小博客 ⋅ 今天 ⋅ 0

IntelliJ IDEA 2018.1新特性

工欲善其事必先利其器,如果有一款IDE可以让你更高效地专注于开发以及源码阅读,为什么不试一试? 本文转载自:netty技术内幕 3月27日,jetbrains正式发布期待已久的IntelliJ IDEA 2018.1,再...

Romane ⋅ 今天 ⋅ 0

浅谈设计模式之工厂模式

工厂模式(Factory Pattern)是 Java 中最常用的设计模式之一。这种类型的设计模式属于创建型模式,它提供了一种创建对象的最佳方式。 在工厂模式中,我们在创建对象时不会对客户端暴露创建逻...

佛系程序猿灬 ⋅ 今天 ⋅ 0

Dockerfile基础命令总结

FROM 指定使用的基础base image FROM scratch # 制作base image ,不使用任何基础imageFROM centos # 使用base imageFROM ubuntu:14.04 尽量使用官方的base image,为了安全 LABEL 描述作...

ExtreU ⋅ 昨天 ⋅ 0

存储,对比私有云和公有云的不同

导读 说起公共存储,很难不与后网络公司时代的选择性外包联系起来,但尽管如此,它还是具备着简单和固有的可用性。公共存储的名字听起来也缺乏专有性,很像是把东西直接堆放在那里而不会得到...

问题终结者 ⋅ 昨天 ⋅ 0

C++难点解析之const修饰符

C++难点解析之const修饰符 c++ 相比于其他编程语言,可能是最为难掌握,概念最为复杂的。结合自己平时的C++使用经验,这里将会列举出一些常见的难点并给出相应的解释。 const修饰符 const在c...

jackie8tao ⋅ 昨天 ⋅ 0

聊聊spring cloud netflix的HystrixCommands

序 本文主要研究一下spring cloud netflix的HystrixCommands。 maven <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-clo......

go4it ⋅ 昨天 ⋅ 0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部