多数据源配置与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问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
其他相关推荐
Spring JTA多数据源事务管理详细教程
刚好项目要用到多数据源,在网上查找了很多资料,花了几天的时间对spring、jta 、atomikos、hibernate进行多数据源事务管理的配置。 也可以直接放在tomcat中运行,不过要用ws调用,因为没有做界面,ws入口在controller包里 下面是jta配置文件: 001 context:annotation-config />
springboot---使用jta+atomikos管理多数据源事务
在实际开发中,我们一个项目可能会用到多个数据库,通常一个数据库对应一个数据源。这时候就要管理多数据源事务。 什么是jta:https://www.ibm.com/developerworks/cn/java/j-lo-jta/ pom.xml 注意这里的druid用1.1.9 &amp;lt;dependency&amp;gt; &amp;lt;groupId&amp;gt;org.springframewor...
使用springboot+jta+atomikos配置多数据源事务
使用springboot+jta+atomikos来配置多数据源下的事务分布管理 里面带有sql语句.直接下载下来,并且运行sql就可以测试运行
springboot整合多数据源及传统的分布式事务解决方法jta-atomikos
所谓的多数据源,简而言之就是:在一个项目中,有多个jdbc连接。 那么我们在在实际项目中,应该怎么样搭建多数据源并区分数据源呢? 举个例子 : 我们这个项目需要访问Test和Test1两个不同的数据库,我们可以采用分包结构,设置读取不同的数据源前缀,选择连接不同数据源。 分包结构 cn.itcats.test--- 访问Test数据库         dao         service ...
atomikos jta 分布式事务(多数据源)处理
1.1、事务的定义: 事务是指多个操作单元组成的合集,多个单元操作是整体不可分割的,要么都操作不成功,要么都成功。其必须遵循四个原则(ACID) 1.2、事务四个原则(ACID) 1、原子性(Atomicity):即事务是不可分割的最小工作单元,事务内的操...
ssm整合jta分布式事务那点事-.-
        之前一直自己写demo,然后用的是springboot整合jta,也没遇到啥问题,而且网上教程很多;这次在实际的一个项目中需要增加一个数据库连接,所以需要分布式事务了,结果一直报错-.-最终解决; 一.最开始没打算用到分布式事务的,就是动态的切换下数据源就行了: 1.准备配置类: public enum MyDataSource { DEFAULT, INDUSTR...
atomikos实现多数据源支持分布式事务管理(spring、tomcat、JTA)
Atomikos TransactionsEssentials 是一个可靠的库,可以加入到您的Java应用程序,也就是说为了使用这个产品,您必须添加一些jar文件(包括在dist和lib文件夹下)到您的应用程序或者应用程序服务器。 起因:  小项目,没有用分布式,但要操作两个数据库。本以为随便用spring配置两个数据源就搞定,查询是没问题,问题是有一个数据库老是插不进数据。Google狂搜之
WebLogic11g-配置数据源及全局事务JTA
这篇文章依然以Springside3的mini-web为例(数据库采用oracle) 一、使用WebLogic的dataSource获取数据库连接 1、介绍WebLogic11g的数据源配置: 1)启动domain服务,登录控制台(具体可参考前两篇),点击域结构-》服务-》数据源,如下图所示: [img]http://dl2.iteye.com/upload/attachment/0089...
ssm多数据源多事物配置
最近有个需求是要为项目配置多个数据源,就此看了一下资料,做出了一个Demo,在此分享一下。        项目的数据源是在spring的配置文件中配置的,同样也是使用spring的事务来管理。配置多个数据源,首先需要copy一份同样的数据源配置,数据源配置如下                需要注意的是,跟普通的数据源配置不一样的是:在配置MapperScannerConfigure
Spring-boot下的mybatis多数据源JTA配置
一.配置properties spring.jta.enabled=true #spring.jta.atomikos.properties.service==com.atomikos.icatch.standalone.UserTransactionServiceFactory #spring.jta.atomikos.properties.max-actives=200 #spring.jt
Atomikos分布式事务中切换数据源
分布式XA事务管理,多数据源动态切换, atomikos
Java架构学习(二十八)SpringBoot高级&整合多数据源&分布式事务jta+Automikos&整合Log4j&全局AOP&定时任务&异步调用&读取配置参数&多环境配置&yml打包发布
SpringBoot高级 一、@SpringBootApplication用法 @SpringBootApplication作用:启动项目,整合常用注解,扫包作用。 扫包只能在当前同级包下。 整合了这三个注解: @Configuration @EnableAutoConfiguration @ComponentScan 二、SpringBoot整合多数据源 SpringBoot整...
Spring 多数据库事务的一致性(JTA 和 非JTA)
这里的项目是基于 Spring4.X + hibernate4.X架构的。最近的一个项目需要两个数据库,一个Oracle,一个是Sqlserver。业务中有一些需求需要跨库事务的一致,举个例子:合同签订保存到基于Oracle的ERP数据库,紧接着下发到Sqlserver的WMS数据库。 以前听说过JTA分布式事务,google到两种分布式框架:JOTM,atomikos。貌似JOTM简便点,...
druid配置多数据源与分布式事务
spring 2.5以后,spring 删除了JotmFactoryBean ,spring不再提供对jotm提供支持 spring atomikos 集成 atomikos需要的jar atomikos-util-3.9.1.jar transactions-3.9.1.jar transactions-api-3.9.1.jar transactions-jdb
SpringBoot+Atomikos分布式事务及多数据源动态切换,两种demo
SpringBoot+Atomikos分布式事务及多数据源动态切换,两种demo
spring boot学习6之mybatis+PageHelper分页插件+jta多数据源事务整合
在项目开发中,随着业务的扩展,api可能会操作多个数据库。本博文就学习下spring boot下使用spring-boot-starter-jta-atomikos对mybatis+mysql+PageHelper分页插件的整合。   项目文件结构 例子源码,已上传github  准备两个数据源数据库(如果只有一个数据源,那就新建2个数据库进行测试也是OK的)
Spring配置多数据源以及基于Atomikos的事务一致性配置
开发生涯第一篇博客,请各位同仁多多指教     最近项目中需要用到多个数据源,查阅资料后完成了配置,包括多数据源对应的分布式事务的配置,这里用的是Atomikos,Atomikos是一款Java/JTA 事务处理工具,可以在多数据源的环境中进行分布式事务管理。在该博文中只配置2个mysql的数据源作示范,其他的诸如SqlServer,oracle等数据库的配置请查阅相关资料。     首先,集
hibernate 多数据源事务控制-注解方式
编程式的事务控制很简单. 注解的方式如何操作呢? 比如我有两个数据源,一个是datasouce-vancl-union,一个是datasource-scm 那么就会产生两个sessionfactory,一个叫sessionfactory-vancl-union,一个叫sessionfactory-scm 那么我们就会有两个transactionmanager,一个叫tran
springmvc+mybatis多数据源分布式事务管理
目录 springmvcmybatis多数据源分布式事务管理 pom依赖 jtaproperties 配置数据源 配置SQLSessionFactory 配置MapperScanner 配置Jta事务 实体 dao XML service Junit测试 完结springmvc+mybatis多数据源分布式事务管理 最近项目用到spring多数据源以进行数据整合,可是配置上事务时,发现数据源不
spring4+mybatis3+atomikos3.9多数据源分布式事务控制
spring4+mybatis3+atomikos3.9分布式事务控制pom文件关键jar一览 <dependency> <groupId>org.springframework</groupId> <artifactId>spring-tx</artifactId> <version>4.2.3.RELEASE<
基于spring boot项目的多数据源配置与分布式事务处理总结
多数据源配置 项目存在10个数据源,如下 core_biz 业务逻辑 数据库core_sys 系统设置 数据库fund_pool 资金池 数据库 分用户拆分了8个库 针对这10个数据源,分别进行创建 首先为业务逻辑数据库创建数据源,定义为Java Bean @Configuration及@Bean注解的使用不做赘述 @Configuration public c
SpringBoot多数据源配置事务
在多数据源中配置事务,其实对于SpringBoot来很简单,当然这个的前提是首先把多数据源都配好的情况下,如果不会多数据源配置,请看该系列 SpringBoot整合多数据源首先在启动类配置 @SpringBootApplication @EnableTransactionManagement public class AccountApplication { public static vo
Spring JTA接口+Atomikos实现申明式分布式事务控制
1. 在pom文件引入atomikos依赖 用maven要简单一点,只需要加入两个依赖: com.atomikos transactions-jdbc 3.7.0 javax.transaction jta 1.1 2. 将需要分布式事务的数据源变成AtomikosDataSourceBean
Spring Boot+Druid+Mybatis实现JTA分布式事务
Spring Boot+Druid+Mybatis实现JTA分布式事务
springboot配置多数据源以及事务管理
1、在properties文件中配置多个数据库连接信息,不可使用springboot提供的属性名要自定义,但是后缀不可改变,加载的时候根据他的前缀进行加载。 spring.test01.jdbc-url=jdbc:mysql://localhost:3306/test spring.test01.username=root spring.test01.password=123456 spring...
JTA事务和普通JDBC事务回滚实例
下面给出了回滚JDBC事务的代码示例:public void processT(String orders) { Context initCtx = new InitialContext(); javax.sql.DataSource ds = javax.sql.DataSource)initCtx.lookup (“java:comp/env/jdbc/OrdersDB”); java.sql...
分布式事务JTA实现之:SSM+ATOMIKOS
**1.JTA事物 Java事务API(Java Transaction API,简称JTA ) 是一个Java企业版 的应用程序接口,在Java环境中,允许完成跨越多个XA资源的分布式事务.一个分布式的事务涉及一个事务管理器和一个或者多个资源管理器。一个资源管理器是任何类型的持久性的数据存储。事务管理器负责协调所有事务参与者之间的通信。 常见的JTA实现有以下几种: 1.J2EE容器所
【SpringBoot2.0】基于Atomikos的多数据源分布式事务(XA)解决方案
最近工作中在同一项目中用到了多数据源,虽然项目本身对多数据源的事务没有要求,甚至可以不使用事务。但是本着精益求精的原则,加上各种资料的查阅,终于实现了多数据源的XA(分布式事务) 项目框架 springboot2.0.x springmvc mybatis 对多数据源的mapper的处理 针对多个数据源,mapper通常有两种处理方式:一种是将各个数据源对应的mapper放置在...
Spring Boot Druid 多数据源 Atomikos 分布式事务缺陷
多数据源动态加载事务控制 源码下载地址:https://github.com/qingqiangqiang/dynamic_datasource.git 根据spring boot官方文档描述,如果spring boot检测到了jta环境,会自动进行配置,故此处不需要进行事务配置 官方地址:http://docs.spring.io/spring-boot/docs/current/re...
springboot多数据源,分布式事务管理atomikos,自动扫描service配置事务
1.使用的Atomikos:一个为Java平台提供增值服务的并且开源类事务管理器。2.数据源配置:@Configuration public class DatasourceConfig { @Bean(destroyMethod = &quot;close&quot;, name = DataSources.MASTER_DB) @Primary @Autowired public DataSou...
JTA分布式事务之JMS篇
 前言 我在上篇文章《【消息队列】ActiveMQ与Spring集成》讲解如何用spring编写一个简单的发送消息然后接收的JMS应用,不过例子中为了简单并没有使用事务,本文主要讲下如何增加事务的控制。在JMS中有两种事务控制方式:本地事务和JTA事务。由于实际的业务很少完全脱离数据库的使用,经常需要在一个事务中同时操作数据库和JMS,所以一般会使用JTA事务控制(分布式事务),本文就只讲J...
spring mybatis 多数据源 多事务管理器的问题
问题 用到了2个数据源 2个事务管理器 事务管理器1 是jtatransactionmanager 因为自己的项目可能需要往其他数据源提交数据 所以使用了jta 事务管理器2 是普通的单个数据源(针对自己数据库的)的事务管理器 只往自己的数据源提交数据 还使用了mybatis,mapper是用spring扫描的,但是2个sqlsessionfactory都扫描的话注入mapper可能会有问
SpringBoot多数据源事务管理机制
写到多数据源事务来了就必定写成功了多数据源项目,可以参考我上一篇博客:SpringBoot根据包名进行区分使用多数据源   1、文章中的第七步其实就已经配置好了事务管理器到Spring容器了 按照套路来第二个数据源的事务管理Bean名字大家应该想到了那就是“test2TransactionManager”   2、是时候改装Service层加上事务注解了----&amp;gt;记着这里是个坑...
spring多数据源的配置(分布式事务管理)
spring多数据源的配置(分布式事务管理)
JTA分布式事务实践
最近一直在研究怎么实现分布式事务,花了不少时间,测试工程启停测试了无数次,最终实现的时候其实也就是写一些配置文件,对于工程代码没什么影响。目前研究还不是很深入,对于全面崩溃恢复如何实现和测试还不清楚。本文先介绍基础的实现。   当业务需要在一个事务中操作多个不同的资源,例如多个数据库,消息队列,缓存等,那么就需要使用分布式事务了。在java中一般建议使用JTA,这样开发人员就不用关心什么叫...
spring4+mybatis3+atomikos3.9多数据源分布式事务控制配置(备用)
pom文件关键jar一览 dependency> groupId>org.springframeworkgroupId> artifactId>spring-txartifactId> version>4.2.3.RELEASEversion> dependency> depe
注解动态切换数据库时,如何处理事务失效(@Transactional / JTA)
突发奇想想弄一个动态切换数据源的东东。于是在网上搜了很多关于配置注解的方式实现动态切换数据源的资料。实现了在service方法上加上一个指定数据源标识的注解就能用该数据源执行数据库操作的功能(说白了也就AbstractRoutingDataSource方式实现的)。但是发现一个问题,就是我service里如果有A方法,A方法需要调用同样是service层的B,C方法。我需要让B方法访问b数据源,C方法访问c数据源,同时还要支持事务。这样的需求用前面的注解切数据源是不能实现的。会发现怎么搞都只能访问b或者c数
springmvc mybatis 多数据源 事务不生效
不生效有几种情况,父容器加载了有事务性的service,但在springmvc的配置文件中再次扫描导致失去事务性,这种 网上比较多,大家搜一下就行。 我主要介绍一种比较不容易让人注意的方式就是都数据源情况下加载的必须是统一数据源才行 如下配置俩个数据源masterDataSource,slaveDataSourcebean id="masterDataSource" class="com
多数据源配置 情况 下的事务管理
可以是分布式事务管理 也可以是简单的datasourceTranctionManager. 但是我们建议不做分布式事务管理,尽量保证一个事务下只操作一个数据库, 保持服务的功能单一性,如果一个服务会操作到两个数据库中的数据,那涉及到的所有表最好放到同一个数据库中。 因为分布式事务管理,消耗资源严重,性能下降。 如果不是分布式事务管理,又有多个数据源, 我们就要配置多个事务管理器了,哈哈,
springboot中使用jta+atomikos处理多数据源分布式事务问题
springboot中使用jta+atomikos处理多数据源分布式事务问题 多数据源拆分思路: 例子:公司分为两个数据库,一个数据库专门存放共同配置文件,一个数据库是垂直业务数据库 垂直: 业务划分具体数据库 在一个项目中可以有无限个数据源,具体多少根据内存大小 在一个项目多数据源如何划分: (1)分包名: (常用) com.lqr.test01 — datasource1 com.lqr.te...
文章热词 设计制作学习 机器学习教程 Objective-C培训 交互设计视频教程 颜色模型
相关热词 mysql关联查询两次本表 native底部 react extjs glyph 图标 java 事务 学习 区块链问题