多数据源配置与JTA事务问题
        项目中使用两个dataSourc,两个sessionFactory.由于业务变化,需要在项目中切换数据源,单独配置多数据源以及单独配置JTA都能成功,将多数据与JTA整合之后,项目启动总是抛出异常。
        异常如下:
  org.springframework.transaction.IllegalTransactionStateException: Pre-bound JDBC Connection found! HibernateTransactionManager does not support running within DataSourceTransactionManager if told to manage the DataSource itself. It is recommended to use a single HibernateTransactionManager for all transactions on a single DataSource, no matter whether Hibernate or JDBC access.
网上说是jdbc的事务与hibernate的事务起冲突了,但没有找到解决办法,求大神指点。
 1     <!-- atomikos事务管理器 -->
 2     <bean id="atomikosTransactionManager" class="com.atomikos.icatch.jta.UserTransactionManager"
 3         init-method="init" destroy-method="close">
 4         <description>UserTransactionManager</description>
 5         <property name="forceShutdown"><value>true</value></property>
 6     </bean>
 7 
 8     <bean id="atomikosUserTransaction" class="com.atomikos.icatch.jta.UserTransactionImp">
 9         <property name="transactionTimeout" value="300" />
10     </bean>
11 
12     <!-- spring 事务管理器 -->
13     <bean id="springTransactionManager"    class="org.springframework.transaction.jta.JtaTransactionManager">
14         <property name="transactionManager" ref="atomikosTransactionManager"/>
15         <property name="userTransaction" ref="atomikosUserTransaction"/>
16     </bean>
AOP配置:
 1 <aop:aspectj-autoproxy />
 2     <aop:config proxy-target-class="true">
 3         <aop:advisor pointcut="execution(* com.animoor.m2.application..*.*(..))" advice-ref="txAdvice" /> 
 4     </aop:config>
 5 
 6     <tx:advice id="txAdvice" transaction-manager="springTransactionManager">
 7         <tx:attributes>
 8             <tx:method name="get*" read-only="true" />
 9             <tx:method name="find*" read-only="true" />
10             <tx:method name="insert*" propagation="REQUIRED"/>
11             <tx:method name="update*" propagation="REQUIRED" />
12             <tx:method name="add*" propagation="REQUIRED" />
13             <tx:method name="delete*" propagation="REQUIRED" />
14             <tx:method name="update*" propagation="REQUIRED" />
15             
16             <tx:method name="save*" propagation="REQUIRED" />
17             <tx:method name="do*" propagation="REQUIRED" />
18                               ....
19         </tx:attributes>
20     </tx:advice>      
加入多数据源配置:
 1      <bean id="multipleDataSource" class="com.animoor.m2.sys.MultipleDataSource">
 2         <property name="defaultTargetDataSource" ref="dataSourceMes129"/>
 3         <property name="targetDataSources">
 4             <map key-type="java.lang.String">     
 5                 <!--注意这里的value是和上面的DataSource的id对应,key要和下面的CustomerContextHolder中的常量对应 -->
 6                 <entry key="dataSourceMes129" value-ref="dataSourceMes129" />
 7                 <entry key="dataSourceFgms129" value-ref="dataSourceFgms129"/>
 8                 <entry key="dataSourceMes168" value-ref="dataSourceMes168" />
 9                 <entry key="dataSourceFgms168" value-ref="dataSourceFgms168"/>
10             </map>   
11         </property>
12     </bean>
项目加载时调用的方法含get*,find*,将这些get去掉则不会抛出异常,但是去掉之后事务应该没有作用了吧。

请各位大神指点 谢谢  小弟没有金币悬赏,谢谢各位了。
0

2个回答

呵呵,搞spring配置确实麻烦,看来MultipleDataSource是animoor自己的库,刚在stackoverflow找到很久之前关于合并hibernate和jdbc
到一个事物的问答,http://stackoverflow.com/questions/4153199/hibernate-and-jdbc-in-one-transaction,
看看有没有启发。
兄弟是在搞横向扩展吗?

0
LittlehappyXz
瞬时间 谢谢哥们来看!嗯,MultipleDataSource类是自己配置的多数据源类,现在的需求是在原来两个数据源上再加上两个数据源,原来每个数据源对应一个sessionFactory,不存在事务冲突。
4 年多之前 回复

解决了吗,哥们!我觉得你截取的log不对吧!
但我觉得这样配置应该没问题。如果不用JtaTransactionManager,是有问题的,在service开启事务,一个事务肯定就一个datasource吧,所以在service切数据源肯定也不对,除非control层切

0
Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
其他相关推荐
使用springboot+jta+atomikos配置多数据源事务
使用springboot+jta+atomikos来配置多数据源下的事务分布管理 里面带有sql语句.直接下载下来,并且运行sql就可以测试运行
Spring boot+Atomikos+JTA+Hibernate+mybatis+MySQL实现分布式事务+多数据源
springboot+Atomikos+jpa+mysql的JTA分布式事务实现,本案例涉及到2个数据库,预期结果,在同一个事务中,两个库的状态一致
SpringBoot+Atomikos分布式事务及多数据源动态切换,两种demo
SpringBoot+Atomikos分布式事务及多数据源动态切换,两种demo
spring+mybatis+jta实现多数据源的分布式事物(代码可以直接运行)
使用jta来管理多数据源的事物,代码整洁,一看就懂
springboot多数据源事务管理
springboot多数原配置与多事务管理
Spring配置JTA事务管理源码
JTA配置文件请看applicationContext-jta.xml 博文链接:https://liran-email.iteye.com/blog/227990
springMvc结合hibernate多数据源和多事务管理器
要到达的效果是: 1、可以使用注解在服务层选择数据源@DataSource 2、使用事务注解@Transactional选择不同的事务管理器 https://blog.csdn.net/u014572215/article/details/80064611
Spring+iBatis+JOTM实现JTA事务
Spring+iBatis+JOTM实现JTA事务 spring ibatis jotm 分布 事务 多数据源
springboot mybatis多数据源加事务嵌套
springboot mybatis多数据源加事务嵌套 事务之间的调用 回滚 亲测可用 定义2个库分别建立 CREATE TABLE `user` ( `id` int(10) unsigned NOT NULL AUTO_INCREMENT COMMENT '用户编号', `user_name` varchar(25) DEFAULT NULL COMMENT '用户名称', `description` varchar(25) DEFAULT NULL COMMENT '描述', PRIMARY KEY (`id`) ) ENGINE=InnoDB AUTO_INCREMENT=2 DEFAULT CHARSET=utf8; CREATE TABLE `city` ( `id` int(10) unsigned NOT NULL AUTO_INCREMENT COMMENT '城市编号', `province_id` int(10) unsigned NOT NULL COMMENT '省份编号', `city_name` varchar(25) DEFAULT NULL COMMENT '城市名称', `description` varchar(25) DEFAULT NULL COMMENT '描述', PRIMARY KEY (`id`) ) ENGINE=InnoDB AUTO_INCREMENT=2 DEFAULT CHARSET=utf8;
tomcat 配置JTA事务
在tomcat 中配置JTA 事务,方便管理web项目
JPA基本概念,JDBC与JTA 事务、隔离级别、传播特性
尚学堂ejb资料 JDBC与JTA 事务、隔离级别、传播特性 JPA基本概念
Spring Boot+Druid+Mybatis实现JTA分布式事务
Spring Boot+Druid+Mybatis实现JTA分布式事务
Spring+Mybatis+Atomikos实现JAVA初始化并控制多个数据源+分布式事务
Spring+Mybatis+Atomikos实现JAVA初始化并控制多个数据源+分布式事务的一个DEMO,内涵源代码,以及一篇关于该内容的博客
Springboot+Atomikos+Jpa+Mysql实现JTA分布式事务
myeclipse开发,导入即可用,可以参阅http://www.cnblogs.com/shamo89/p/7326718.html
springboot实现多数据源而且加上事务不会使aop切换数据源失效
用springboot 集成mybatis多数据源,用aop实现的动态切换,支持事务,不会使aop动态切换失效。注意:此代码不涉及分布式事务,如果需要分布式事务 需要采取其他方案。
spring的annotation-driven配置事务管理器详解 (多数据源配置
spring的annotation-driven配置事务管理器详解 (多数据源配置
springmvc+mybatis+jta 多数据源配置
通过multipleDataSource 解决多数据切换,并通过jta解决事务同步问题。先配置db.properties文件,再分别在数据库建测试表(user.sql),通过index2.jsp测试。
多数据源事务jta测试
NULL 博文链接:https://malixxx.iteye.com/blog/560727
基于Spring的多数据源(Druid)定时任务
基于Spring的多数据源(Druid)定时任务项目开发
SSM多数据源同包
SSM多数据源同包
springboot多数据源即分布式事务解决方案,添加对多线程的支持
实现系统对多数据源的操作。 实现系统对多数据源的分布式事务管理,包括事务的提交和回滚。
jta分布式事务完成例子,测试通过
此例子简单易读,解压后放入eclipse或myeclipse即可运行。例子虽小,可覆盖面广,设计spring载入.properties文件,spring配置jta和jotm分布式事务,设置数据源连接池,注解事务驱动。功能是在mysql上建立了两个数据库分别为dbone和dbtwo,在dbone里有表tb1,表中只有一个字段id;在dbtwo数据库里有表tb2,表中也只有一个字段id;先向tb1插一条数据,然后在向tb2插一条数据,当没有设置事务时,如果tb2出现异常,tb1能正常插入数据,当设置了分布式事务后,如果tb2出现异常,tb1会自动回滚,没有数据插入。 分布式事务是针对不同数据库的(当然数据库放到不同的机子上也可以)。
SpringBoot 2.X +Mybatis 多数据源
SpringBoot 2.X +Mybatis 多数据源,SpringBoot 2.X +Mybatis 多数据源
springboot+mybatis+jta+atomikos解决多数据源事务问题.pdf
springboot+mybatis+jta+atomikos解决多数据源事务问题
jeecg3.5多数据源配置说明
详细说明了如何在jeecg3.5版本中配置多数据源
JTA分布式事务使用示例代码
JTA分布式事务处理多数据事务问题的示例代码。
spring框架多数据源切换问题的解决
针对用户需求选择访问不同的数据库,用的是spring框架,访问不同数据库但表结构相同,不同数据库表结构不一样,不用数据库有些表结构一样有些又不一样! 首先,这个方案完全是在spring的框架下解决的,数据源依然配置在spring的配置文件中,sessionFactory依然去配置它的dataSource属性,它甚至都不知道dataSource的改变。 其次,实现简单,易于维护。这个方案虽然我说了这么多东西,其实都是分析,真正需要我们写的代码就只有MultiDataSource、SpObserver两个类。 最后,这个方案可以使单数据源与多数据源兼容。
多数据源事务之解决方案jta+atomikos
多数据源事务可采用jta+atomikos方式来解决事务问题。
spring+jms+jta事务的消息发送和消息消费
spring+jms+jta事务的消息发送和消息消费。 完整可正常运行例子,对JTA分布式事务的配置。 本例可以直接作为处理消息的项目,在此之上直接继续开发。
LCN-分布式事务配置
springboot-dubbo 使用LCN分布式事务控制, 此文件有详细的配置方式
spring 结合druid和hibernate使用jta配置分布式事务
atomikos实现多数据源支持分布式事务管理(spring、tomcat、JTA) 结合spring 和durid进行配置,
JTA事务源码示例
Spring+iBatis+JOTM实现JTA事务: 如何处理跨库事物:spring + jtom 的jta事务是个很好的选择. 这个源码示例非常不错,包括所有的源码和jar包,下载后eclipse 或 myeclipse 导入就能用。 里面有详细的说明和注释,欢迎下载传播。有问题请在评价中留言,我会及时回复的。 <bean id="jotm" class="org.springframework.transaction.jta.JotmFactoryBean"/> <!-- JTA事务管理器 --> <bean id="myJtaManager" class="org.springframework.transaction.jta.JtaTransactionManager"> <property name="userTransaction"> <ref local="jotm"/> </property> </bean> <!-- 数据源A --> <bean id="dataSourceA" class="org.enhydra.jdbc.pool.StandardXAPoolDataSource" destroy-method="shutdown"> <property name="dataSource"> <bean class="org.enhydra.jdbc.standard.StandardXADataSource" destroy-method="shutdown"> <property name="transactionManager" ref="jotm"/> <property name="driverName" value="${jdbc.driver}"/> <property name="url" value="${jdbc.url}"/> </bean> </property> <property name="user" value="${jdbc.username}"/> <property name="password" value="${jdbc.password}"/> </bean> <!-- 数据源B --> <bean id="dataSourceB" class="org.enhydra.jdbc.pool.StandardXAPoolDataSource" destroy-method="shutdown"> <property name="dataSource"> <bean class="org.enhydra.jdbc.standard.StandardXADataSource" destroy-method="shutdown"> <property name="transactionManager" ref="jotm"/> <property name="driverName" value="${jdbc2.driver}"/> <property name="url" value="${jdbc2.url}"/> </bean> </property> <property name="user" value="${jdbc2.username}"/> <property name="password" value="${jdbc.password}"/> </bean> <!-- 事务切面配置 --> <aop:config> <aop:pointcut id="serviceOperation" expression="execution(* *..servi1ce*..*(..))"/> <aop:advisor pointcut-ref="serviceOperation" advice-ref="txAdvice"/> </aop:config> <!-- 通知配置 --> <tx:advice id="txAdvice" transaction-manager="myJtaManager"> <tx:attributes> <tx:method name="delete*" rollback-for="Exception"/> <tx:method name="save*" rollback-for="Exception"/> <tx:method name="update*" rollback-for="Exception"/> <tx:method name="*" read-only="true" rollback-for="Exception"/> </tx:attributes> </tx:advice ...... ...... ......
Spring多数据源分布式事务管理
Spring多数据源分布式事务管理/springmvc+spring+atomikos[jta]+druid+mybatis
分布式,mybatis-plus,多数据源总结
分布式,mybatis-plus,多数据源总结分布式,mybatis-plus,多数据源总结
多数据源 更新 spring jta java jotm
多数据源 更新 spring jta java jotm
spring+druid+AtomikosDataSource实现多数据源切换及分布式事务控制
spring+druid+AtomikosDataSource实现多数据源切换及分布式事务控制
java项目多数据源配置
项目框架是springMVC+hibernate,一个简单的demo易懂,数据库配置自己修改datasource.properties文件,其中连接了两个MySQL数据库,数据库分别各有一张表,一张student表和一张t_user需要自己创建
Springmvc多模块集成多数据源及redis
redis使用请在service中使用注解,有示例代码,亲测可用,环境为jdk1.8
Springboot Druid多数据源 多线程
一个基于Springboot的小项目,采用Druid多数据源的设计,可以同时操作Mysql与Oracle数据库,配置了多线程处理任务,为刚接触springboot的朋友提供参考。
spring、mybatis、atomikos实现DB2、Mysql多数据源事务demo
开发工具:MyEclipse10 数据库:DB2,Mysql demo中使用了2个数据源,1个DB2数据库,1个Mysql数据库。 注:不同数据库dataSource的配置是不一样的
文章热词 机器学习教程 Objective-C培训 交互设计视频教程 颜色模型 设计制作学习
相关热词 mysql关联查询两次本表 native底部 react extjs glyph 图标 java 事务 学习 区块链问题