luo900126
2016-03-18 11:00:53
原
spring JTA多数据源事务管理详细教程
刚好项目要用到多数据源,在网上查找了很多资料,花了几天的时间对spring、jta 、atomikos、hibernate进行多数据源事务管理的配置。
没有花时间弄maven,lib的地址:https://pan.baidu.com/s/1skdIC3N
也可以直接放在tomcat中运行,不过要用ws调用,因为没有做界面,ws入口在controller包里
下面是jta配置文件:
<context:annotation-config /> <!-- 使用注解的包路径 --> <context:component-scan base-package="com.rongli.service,com.rongli.dao,com.rongli.controller" /> <!-- 支持 @Transactional 标记 --> <tx:annotation-driven transaction-manager="springJTATransactionManager" proxy-target-class="true"/> <!-- 导入cxf配置文件 --> <import resource="ws.cxf.xml"/> <!-- 加载properties配置文件 --> <bean id="propertyConfigurer" class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer"> <property name="locations"> <list> <value>classpath:jta.jdbc.properties</value> </list> </property> </bean> <!--公有数据库连接池 --> <bean id="abstractXADataSource" class="com.atomikos.jdbc.AtomikosDataSourceBean" init-method="init" destroy-method="close" abstract="true"> <property name="xaDataSourceClassName" value="com.mysql.jdbc.jdbc2.optional.MysqlXADataSource" /> <property name="poolSize" value="10" /> <property name="minPoolSize" value="10" /> <property name="maxPoolSize" value="30" /> <!--获取连接失败重新获等待最大时间,在这个时间内如果有可用连接,将返回--> <property name="borrowConnectionTimeout" value="60" /> <!--最大获取数据时间,如果不设置这个值,Atomikos使用默认的5分钟, 那么在处理大批量数据读取的时候,一旦超过5分钟,就会抛出类似 Resultset is close 的错误.--> <property name="reapTimeout" value="20000" /> <!-- 最大空闲时间 --> <property name="maxIdleTime" value="60" /> <!--连接回收时间--> <property name="maintenanceInterval" value="60" /> <!--java数据库连接池,最大可等待获取datasouce的时间--> <property name="loginTimeout" value="60" /> <property name="testQuery"> <value>select 1</value> </property> </bean> <!-- 客户数据库 --> <bean id="rlc_cus" parent="abstractXADataSource"> <property name="uniqueResourceName" value="mysql/rlc_cus" /> <property name="xaProperties"> <props> <prop key="URL">${jdbc.rlc_cus.properties}</prop> <prop key="user">${jdbc.rlc.user}</prop> <prop key="password">${jdbc.rlc.password}</prop> <prop key="pinGlobalTxToPhysicalConnection">true</prop> </props> </property> </bean> <!-- 系统数据库 --> <bean id="rlc_sys" parent="abstractXADataSource"> <property name="uniqueResourceName" value="mysql/rlc_sys" /> <property name="xaProperties"> <props> <prop key="URL">${jdbc.rlc_sys.properties}</prop> <prop key="user">${jdbc.rlc.user}</prop> <prop key="password">${jdbc.rlc.password}</prop> <prop key="pinGlobalTxToPhysicalConnection">true</prop> </props> </property> </bean> <!-- 公有SessionFactory配置 --> <bean id="baseSessionFactory" class="org.springframework.orm.hibernate3.annotation.AnnotationSessionFactoryBean" abstract="true"> <property name="hibernateProperties"> <props> <prop key="hibernate.dialect">${hibernate.dialect}</prop> <prop key="hibernate.show_sql">${hibernate.format_sql}</prop> <prop key="hibernate.format_sql">${hibernate.show_sql}</prop> <prop key="javax.persistence.validation.mode">none</prop> </props> </property> <!-- 自动扫描注解方式配置的hibernate类文件 --> <property name="packagesToScan" value="com.rongli.bean"></property> </bean> <!-- sessionFactory配置--> <!-- customer sessionFactory --> <bean id="cusSessionFactory" parent="baseSessionFactory"> <property name="dataSource" ref="rlc_cus" /> </bean> <!-- system sessionFactory --> <bean id="sysSessionFactory" parent="baseSessionFactory"> <property name="dataSource" ref="rlc_sys" /> </bean> <!-- 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>2000</value> </property> </bean> <!-- spring 事务管理器 --> <bean id="springJTATransactionManager" class="org.springframework.transaction.jta.JtaTransactionManager"> <property name="transactionManager"> <ref bean="atomikosTransactionManager" /> </property> <property name="userTransaction"> <ref bean="atomikosUserTransaction" /> </property> </bean> <!-- 用于测试,发布到服务器上时删除 --> <bean id="systemServiceImpl" class="com.rongli.service.impl.SystemServiceImpl"> </bean>
运行截图:
原2个数据库中都没有数据,图如下:
具体代码:
代码运行成功截图:
代码故意抛出异常:
代码运行失败:
失败后2个数据库中没有插入(事务回滚了):
猜你喜欢
- Spring整合Mybatis实现动态数据源切换教程配置
- spring多数据源配置事务回滚
- Spring两种常用的事务管理范例AspectJ和基于注解方式
- spring动态配置定时器quartz2.x教程详解
- spring cloud集成swagger2和配置数据源
- spring data jpa多数据源配置demo
- spring boot + mybatis(通用mapper) druid多数据源切换配置
- spring boot整合mybatis连接查询两个mysql数据源的配置实例
- springboot+druid+多数据源配置
- Spring Boot学习(七)之Web应用使用jdbctemplate多数据源配置博客源码
- Spring Boot学习(七)之Web应用使用Spring-data-jpa多数据源配置 博客源码
- spring boot项目搭建多数据源,实现主从数据库读写分离的功能
请下载代码后再发表评论
文件名:jtatest.rar,文件大小:86.043K
下载
- /
- /jtatest
- /jtatest/.classpath
- /jtatest/.project
- /jtatest/.settings
- /jtatest/.settings/.jsdtscope
- /jtatest/.settings/org.eclipse.core.resources.prefs
- /jtatest/.settings/org.eclipse.jdt.core.prefs
- /jtatest/.settings/org.eclipse.wst.common.component
- /jtatest/.settings/org.eclipse.wst.common.project.facet.core.xml
- /jtatest/.settings/org.eclipse.wst.jsdt.ui.superType.container
- /jtatest/.settings/org.eclipse.wst.jsdt.ui.superType.name
- /jtatest/resources
- /jtatest/resources/jta.jdbc.properties
- /jtatest
相关代码
- spring 各种demo实例
- [工作必备]spring定时器简单的demo
- Java Spring定时器Demo, 可自动跳过节假日
- Spring两种常用的事务管理范例AspectJ和基于注解方式
- 证 Spring生命周期默认初始化和销毁方法通过xml配置实现
- 证 spring通过@Async注解实现异步执行Service方法并且通过Java Future对象得到执行结果
- spring入门实例demo
- spring实例入门教程
- spring整合rmi代码实例
- 原证精 spring如何注入List,Set,Map对象
- Spring Hibernate Spring Data MongoDB Akka Titles Bootstrap JQuery Maven 大全
- 证 spring实现忽略禁用@Required注解的实例
最近下载
123456ym LV9
2022年4月27日
qqaazz1 LV5
2018年11月28日
cdghds LV1
2018年4月11日
KevinKevin LV2
2018年3月24日
CLATZJ LV19
2018年3月15日
scpcyzxb LV16
2018年1月14日
3013886712 LV7
2017年11月16日
yunlielai LV13
2017年11月2日
l06066hb LV2
2017年9月20日
七味都市 LV3
2017年8月14日
最近浏览
xp95323 LV14
2022年9月21日
123456ym LV9
2022年4月27日
xb1406112453 LV5
2021年5月26日
sizeking LV8
2021年4月12日
939867966 LV1
2021年2月25日
ld950929
2020年12月23日
暂无贡献等级
g1121345342 LV9
2020年12月16日
Coincidance LV8
2020年12月3日
is_gary LV15
2020年8月24日
梓丶叶 LV1
2020年6月28日