多数据源配置与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
所谓的多数据源,简而言之就是:在一个项目中,有多个jdbc连接。 那么我们在在实际项目中,应该怎么样搭建多数据源并区分数据源呢? 举个例子 : 我们这个项目需要访问Test和Test1两个不同的数据库,我们可以采用分包结构,设置读取不同的数据源前缀,选择连接不同数据源。 分包结构 cn.itcats.test--- 访问Test数据库         dao         service ...
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就可以测试运行
atomikos实现多数据源支持分布式事务管理(spring、tomcat、JTA)
Atomikos TransactionsEssentials 是一个可靠的库,可以加入到您的Java应用程序,也就是说为了使用这个产品,您必须添加一些jar文件(包括在dist和lib文件夹下)到您的应用程序或者应用程序服务器。 起因:  小项目,没有用分布式,但要操作两个数据库。本以为随便用spring配置两个数据源就搞定,查询是没问题,问题是有一个数据库老是插不进数据。Google狂搜之
ssm整合jta分布式事务那点事-.-
        之前一直自己写demo,然后用的是springboot整合jta,也没遇到啥问题,而且网上教程很多;这次在实际的一个项目中需要增加一个数据库连接,所以需要分布式事务了,结果一直报错-.-最终解决; 一.最开始没打算用到分布式事务的,就是动态的切换下数据源就行了: 1.准备配置类: public enum MyDataSource { DEFAULT, INDUSTR...
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
atomikos jta 分布式事务(多数据源)处理
1.1、事务的定义: 事务是指多个操作单元组成的合集,多个单元操作是整体不可分割的,要么都操作不成功,要么都成功。其必须遵循四个原则(ACID) 1.2、事务四个原则(ACID) 1、原子性(Atomicity):即事务是不可分割的最小工作单元,事务内的操...
SpringBoot+Atomikos分布式事务及多数据源动态切换,两种demo
SpringBoot+Atomikos分布式事务及多数据源动态切换,两种demo
Spring 多数据库事务的一致性(JTA 和 非JTA)
这里的项目是基于 Spring4.X + hibernate4.X架构的。最近的一个项目需要两个数据库,一个Oracle,一个是Sqlserver。业务中有一些需求需要跨库事务的一致,举个例子:合同签订保存到基于Oracle的ERP数据库,紧接着下发到Sqlserver的WMS数据库。 以前听说过JTA分布式事务,google到两种分布式框架:JOTM,atomikos。貌似JOTM简便点,...
Java架构学习(二十八)SpringBoot高级&整合多数据源&分布式事务jta+Automikos&整合Log4j&全局AOP&定时任务&异步调用&读取配置参数&多环境配置&yml打包发布
SpringBoot高级 一、@SpringBootApplication用法 @SpringBootApplication作用:启动项目,整合常用注解,扫包作用。 扫包只能在当前同级包下。 整合了这三个注解: @Configuration @EnableAutoConfiguration @ComponentScan 二、SpringBoot整合多数据源 SpringBoot整...
Atomikos分布式事务中切换数据源
分布式XA事务管理,多数据源动态切换, atomikos
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
springboot中使用jta+atomikos处理多数据源分布式事务问题
springboot中使用jta+atomikos处理多数据源分布式事务问题 多数据源拆分思路: 例子:公司分为两个数据库,一个数据库专门存放共同配置文件,一个数据库是垂直业务数据库 垂直: 业务划分具体数据库 在一个项目中可以有无限个数据源,具体多少根据内存大小 在一个项目多数据源如何划分: (1)分包名: (常用) com.lqr.test01 — datasource1 com.lqr.te...
ssm多数据源多事物配置
最近有个需求是要为项目配置多个数据源,就此看了一下资料,做出了一个Demo,在此分享一下。        项目的数据源是在spring的配置文件中配置的,同样也是使用spring的事务来管理。配置多个数据源,首先需要copy一份同样的数据源配置,数据源配置如下                需要注意的是,跟普通的数据源配置不一样的是:在配置MapperScannerConfigure
springmvc+mybatis多数据源分布式事务管理
目录 springmvcmybatis多数据源分布式事务管理 pom依赖 jtaproperties 配置数据源 配置SQLSessionFactory 配置MapperScanner 配置Jta事务 实体 dao XML service Junit测试 完结springmvc+mybatis多数据源分布式事务管理 最近项目用到spring多数据源以进行数据整合,可是配置上事务时,发现数据源不
spring mybatis 多数据源 多事务管理器的问题
问题 用到了2个数据源 2个事务管理器 事务管理器1 是jtatransactionmanager 因为自己的项目可能需要往其他数据源提交数据 所以使用了jta 事务管理器2 是普通的单个数据源(针对自己数据库的)的事务管理器 只往自己的数据源提交数据 还使用了mybatis,mapper是用spring扫描的,但是2个sqlsessionfactory都扫描的话注入mapper可能会有问
Spring配置多数据源以及基于Atomikos的事务一致性配置
开发生涯第一篇博客,请各位同仁多多指教     最近项目中需要用到多个数据源,查阅资料后完成了配置,包括多数据源对应的分布式事务的配置,这里用的是Atomikos,Atomikos是一款Java/JTA 事务处理工具,可以在多数据源的环境中进行分布式事务管理。在该博文中只配置2个mysql的数据源作示范,其他的诸如SqlServer,oracle等数据库的配置请查阅相关资料。     首先,集
【SpringBoot2.0】基于Atomikos的多数据源分布式事务(XA)解决方案
最近工作中在同一项目中用到了多数据源,虽然项目本身对多数据源的事务没有要求,甚至可以不使用事务。但是本着精益求精的原则,加上各种资料的查阅,终于实现了多数据源的XA(分布式事务) 项目框架 springboot2.0.x springmvc mybatis 对多数据源的mapper的处理 针对多个数据源,mapper通常有两种处理方式:一种是将各个数据源对应的mapper放置在...
WebLogic11g-配置数据源及全局事务JTA
这篇文章依然以Springside3的mini-web为例(数据库采用oracle) 一、使用WebLogic的dataSource获取数据库连接 1、介绍WebLogic11g的数据源配置: 1)启动domain服务,登录控制台(具体可参考前两篇),点击域结构-》服务-》数据源,如下图所示: [img]http://dl2.iteye.com/upload/attachment/0089...
Spring boot+Atomikos+JTA+Hibernate+mybatis+MySQL实现分布式事务+多数据源
springboot+Atomikos+jpa+mysql的JTA分布式事务实现,本案例涉及到2个数据库,预期结果,在同一个事务中,两个库的状态一致
spring4+mybatis3+atomikos3.9多数据源分布式事务控制
spring4+mybatis3+atomikos3.9分布式事务控制pom文件关键jar一览 <dependency> <groupId>org.springframework</groupId> <artifactId>spring-tx</artifactId> <version>4.2.3.RELEASE<
SpringBoot多数据源配置事务
在多数据源中配置事务,其实对于SpringBoot来很简单,当然这个的前提是首先把多数据源都配好的情况下,如果不会多数据源配置,请看该系列 SpringBoot整合多数据源首先在启动类配置 @SpringBootApplication @EnableTransactionManagement public class AccountApplication { public static vo
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...
springmvc mybatis 多数据源 事务不生效
不生效有几种情况,父容器加载了有事务性的service,但在springmvc的配置文件中再次扫描导致失去事务性,这种 网上比较多,大家搜一下就行。 我主要介绍一种比较不容易让人注意的方式就是都数据源情况下加载的必须是统一数据源才行 如下配置俩个数据源masterDataSource,slaveDataSourcebean id="masterDataSource" class="com
18.从零开始学springboot-jpa-atomikos多数据源分布式事务案例
前言 前章我们已经能够流畅的写出一个基于springboot2.1.3的多数据源的案例了,而且我们选择很多,可以通过jpa搭建,也可以通过jdbc。有了多数据源,必然会碰到多数据源事务处理的问题,也就是分布式事务,所以,这节,我们就通过jpa多数据源+atomikos的方式来实现分布式事务的处理案例。 Atomikos介绍 Atomikos 是一个为Java平台提供增值服务的并且开源类事务管理器。...
分布式事务JTA实现之:SSM+ATOMIKOS
**1.JTA事物 Java事务API(Java Transaction API,简称JTA ) 是一个Java企业版 的应用程序接口,在Java环境中,允许完成跨越多个XA资源的分布式事务.一个分布式的事务涉及一个事务管理器和一个或者多个资源管理器。一个资源管理器是任何类型的持久性的数据存储。事务管理器负责协调所有事务参与者之间的通信。 常见的JTA实现有以下几种: 1.J2EE容器所
spring、mybatis实现数据库多数据源和分布式事务
多数据源就是在一个程序服务里面,需发连接多个数据库。动态数据源在多数据源的基础上,要实现数据源的动态切换。这两种复杂系统的数据库联接有相关性,也有不同应用场景的区别。如要连接两个不同的业务库,一般会使用多数据源,如要动态切换不同数据源的相同业务库,会选择使用动态数据源。分布式事务要支持多数据源的事务,只能用JTA事务管理(没用过 -_-||),而且应用服务器还不能是Tomcat(一直在用tomca...
spring多数据源的配置(分布式事务管理)
spring多数据源的配置(分布式事务管理)
SpringBoot学习——springboot 整合jta-atomikos实现多数据源及分布式事务管理
一、POM 文件引入 JAR   在 pom.xml 中引入 jta-atomikos 以及测试包 &lt;!-- mybatis 依赖 --&gt; &lt;dependency&gt; &lt;groupId&gt;org.mybatis.spring.boot&lt;/groupId&gt; &lt;artifactId&gt;mybatis-spring-boot-starter&lt...
注解动态切换数据库时,如何处理事务失效(@Transactional / JTA)
突发奇想想弄一个动态切换数据源的东东。于是在网上搜了很多关于配置注解的方式实现动态切换数据源的资料。实现了在service方法上加上一个指定数据源标识的注解就能用该数据源执行数据库操作的功能(说白了也就AbstractRoutingDataSource方式实现的)。但是发现一个问题,就是我service里如果有A方法,A方法需要调用同样是service层的B,C方法。我需要让B方法访问b数据源,C方法访问c数据源,同时还要支持事务。这样的需求用前面的注解切数据源是不能实现的。会发现怎么搞都只能访问b或者c数
Spring JTA接口+Atomikos实现申明式分布式事务控制
1. 在pom文件引入atomikos依赖 用maven要简单一点,只需要加入两个依赖: com.atomikos transactions-jdbc 3.7.0 javax.transaction jta 1.1 2. 将需要分布式事务的数据源变成AtomikosDataSourceBean
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
分布式事务与本地事务一样,包含原子性(Atomicity)、一致性(Consistency)、隔离性(Isolation)和持久性(Durability)。两阶段提交是保证分布式事务中原子性的重要方法。本文重点介绍了两阶段提交的原理,PostgreSQL中两阶段提交接口,以及Java中两阶段提交接口规范JTA的使用方式。
JTA分布式事务实践
最近一直在研究怎么实现分布式事务,花了不少时间,测试工程启停测试了无数次,最终实现的时候其实也就是写一些配置文件,对于工程代码没什么影响。目前研究还不是很深入,对于全面崩溃恢复如何实现和测试还不清楚。本文先介绍基础的实现。   当业务需要在一个事务中操作多个不同的资源,例如多个数据库,消息队列,缓存等,那么就需要使用分布式事务了。在java中一般建议使用JTA,这样开发人员就不用关心什么叫...
【十九】Spring Boot之分布式事务(JTA、Atomikos、Druid、Mybatis)
一、介绍 1.分布式、本地事务 1.本地事务:普通事务。只能保证在一个数据库上的操作ACID。 JDBC事务就是本地事务,通过connection对象管理。 2.分布式事务:两个及以上数据库源的事务(由每台数据库的本地事务组成的), 使事务可以跨越多个数据库。比如,A库的a1表和B库的b1表,在一个事务中,如果B库的b1表回滚了,A库的a1表也要回滚。 JTA事务支持分布式事务。JTA...
spring 多数据源事务问题
spring整合mybatis,2个数据源,使用DynamicDataSource+aop,在方法调用之前根据方法上的注解来切换数据源, xml version="1.0" encoding="UTF-8"?> xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/200
springboot(1)+jpa(hibernate)配置多数据源 分布式事务
springboot+jpa配置多数据源 功能情况: 实现系统对多数据源的操作。 实现系统对多数据源的分布式事务管理,包括事务的提交和回滚。 本文与网络上其他实现方案不一样,网络上其他很多方案都是基于将不同表数据存储到不同数据源中,从不同数据源读取相应数据。试想,如果要将同一数据实体如用户信息存储在不同数据源中(数据横向划分时),或者想根据条件查询不同数据源中的用户信息时,或者需要灵活实现...
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...
分布式事务--XA 解决多个数据源操作
个人备忘事务(官方解释):是由一组sql语句组成的“逻辑处理单元”。事务具有如下四个属性,通常称为事务的ACID属性 : 1. 原子性(Atomicity): 事务是一个原子操作单元,要么都执行,要么都不执行。 2. 一致性(Consistent):在事务开始和完成时,数据都必须保持一致。 3. 隔离性(Isoation): 数据库系统提供一定的隔离机制,保证事务在不受外部并发操作影响的“独立
文章热词 机器学习教程 Objective-C培训 交互设计视频教程 颜色模型 设计制作学习
相关热词 mysql关联查询两次本表 native底部 react extjs glyph 图标 java 事务 学习 区块链问题