springboot+jpa+jta-atomikos多数据源事务异常 100C

springboot + jpa配置jta事务,出现第一个数据源可以正常使用,但第二个只能查询,不能CRUD操作,求大神指点

第一个数据源如下:
@Configuration
@EnableTransactionManagement
@EnableJpaRepositories(basePackages = "com.saxon.primary.dao",
entityManagerFactoryRef = "primaryEntityManagerFactory",
transactionManagerRef = "jtaTransactionManager")
public class PrimaryDataSourceConfig {

@Bean
@Primary
@ConfigurationProperties("spring.primary.datasource")
public DataSourceProperties primaryProperties(){
    return new DataSourceProperties();
}

@Bean
@Primary
@ConfigurationProperties("spring.primary.datasource")
public DataSource primaryDataSource(){
    return primaryProperties().initializeDataSourceBuilder().build();
}

@Bean
@Primary
public LocalContainerEntityManagerFactoryBean primaryEntityManagerFactory(EntityManagerFactoryBuilder builder){
    return builder
            .dataSource(primaryDataSource())
            .persistenceUnit("primary")
            .packages("com.saxon.primary.entity")
            .build();
}

}

第二个数据源:
@Configuration
@EnableTransactionManagement
@EnableJpaRepositories(basePackages = "com.saxon.others.dao",
entityManagerFactoryRef = "othersEntityManagerFactory",
transactionManagerRef = "jtaTransactionManager")
public class OthersDataSourceConfig {

@Bean
@ConfigurationProperties("spring.others.datasource")
public DataSourceProperties othersProperties(){
    return new DataSourceProperties();
}

@Bean
@ConfigurationProperties("spring.others.datasource")
public DataSource othersDataSource(){
    return othersProperties().initializeDataSourceBuilder().build();
}

@Bean
public LocalContainerEntityManagerFactoryBean othersEntityManagerFactory(EntityManagerFactoryBuilder builder){
    return builder
            .dataSource(othersDataSource())
            .persistenceUnit("others")
            .packages("com.saxon.others.entity")
            .build();
}

}

jta事务配置:
@Configuration
@EnableTransactionManagement
public class TransactionManagerConfig {

@Bean(destroyMethod = "close", initMethod = "init")
public UserTransactionManager userTransactionManager() {
    UserTransactionManager userTransactionManager = new UserTransactionManager();
    userTransactionManager.setForceShutdown(false);
    return userTransactionManager;
}

public @Bean UserTransaction userTransaction() throws Throwable {
    UserTransactionImp userTransactionImp = new UserTransactionImp();
    userTransactionImp.setTransactionTimeout(300);
    return userTransactionImp;
}

public @Bean PlatformTransactionManager jtaTransactionManager() throws Throwable  {
    JtaTransactionManager jtaTransactionManager = new JtaTransactionManager();
    jtaTransactionManager.setTransactionManager(userTransactionManager());
    jtaTransactionManager.setUserTransaction(userTransaction());
    return jtaTransactionManager;
}

}
但执行第二个数据源的crud操作,报如下异常:
2017-07-20 18:00:43.131 ERROR 46084 --- [nio-9008-exec-3] o.a.c.c.C.[.[.[/].[dispatcherServlet] : Servlet.service() for servlet [dispatcherServlet] in context with path [] threw exception [Request processing failed; nested exception is org.springframework.dao.InvalidDataAccessApiUsageException: no transaction is in progress; nested exception is javax.persistence.TransactionRequiredException: no transaction is in progress] with root cause

javax.persistence.TransactionRequiredException: no transaction is in progress
at org.hibernate.jpa.spi.AbstractEntityManagerImpl.checkTransactionNeeded(AbstractEntityManagerImpl.java:1136) ~[hibernate-entitymanager-5.0.12.Final.jar:5.0.12.Final]
at org.hibernate.jpa.spi.AbstractEntityManagerImpl.flush(AbstractEntityManagerImpl.java:1297) ~[hibernate-entitymanager-5.0.12.Final.jar:5.0.12.Final]
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) ~[na:1.8.0_121]
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) ~[na:1.8.0_121]
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) ~[na:1.8.0_121]
at java.lang.reflect.Method.invoke(Method.java:498) ~[na:1.8.0_121]
at org.springframework.orm.jpa.ExtendedEntityManagerCreator$ExtendedEntityManagerInvocationHandler.invoke(ExtendedEntityManagerCreator.java:347) ~[spring-orm-4.3.9.RELEASE.jar:4.3.9.RELEASE]
at com.sun.proxy.$Proxy76.flush(Unknown Source) ~[na:na]
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) ~[na:1.8.0_121]
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) ~[na:1.8.0_121]
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) ~[na:1.8.0_121]
at java.lang.reflect.Method.invoke(Method.java:498) ~[na:1.8.0_121]

1
MrCoderStack
MrCoderStack 解决了没?
大约 2 个月之前 回复

1个回答

1
Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
其他相关推荐
springboot---使用jta+atomikos管理多数据源事务
在实际开发中,我们一个项目可能会用到多个数据库,通常一个数据库对应一个数据源。这时候就要管理多数据源事务。 什么是jta:https://www.ibm.com/developerworks/cn/java/j-lo-jta/ pom.xml 注意这里的druid用1.1.9 <dependency> <groupId>org.springframewor...
springboot整合多数据源及传统的分布式事务解决方法jta-atomikos
所谓的多数据源,简而言之就是:在一个项目中,有多个jdbc连接。 那么我们在在实际项目中,应该怎么样搭建多数据源并区分数据源呢? 举个例子 : 我们这个项目需要访问Test和Test1两个不同的数据库,我们可以采用分包结构,设置读取不同的数据源前缀,选择连接不同数据源。 分包结构 cn.itcats.test--- 访问Test数据库         dao         service ...
使用springboot+jta+atomikos配置多数据源事务
使用springboot+jta+atomikos来配置多数据源下的事务分布管理 里面带有sql语句.直接下载下来,并且运行sql就可以测试运行
【SpringBoot2.0】基于Atomikos的多数据源分布式事务(XA)解决方案
最近工作中在同一项目中用到了多数据源,虽然项目本身对多数据源的事务没有要求,甚至可以不使用事务。但是本着精益求精的原则,加上各种资料的查阅,终于实现了多数据源的XA(分布式事务) 项目框架 springboot2.0.x springmvc mybatis 对多数据源的mapper的处理 针对多个数据源,mapper通常有两种处理方式:一种是将各个数据源对应的mapper放置在...
springboot(1)+jpa(hibernate)配置多数据源 分布式事务
springboot+jpa配置多数据源 功能情况: 实现系统对多数据源的操作。 实现系统对多数据源的分布式事务管理,包括事务的提交和回滚。 本文与网络上其他实现方案不一样,网络上其他很多方案都是基于将不同表数据存储到不同数据源中,从不同数据源读取相应数据。试想,如果要将同一数据实体如用户信息存储在不同数据源中(数据横向划分时),或者想根据条件查询不同数据源中的用户信息时,或者需要灵活实现...
Springboot+Atomikos+Jpa+Mysql实现JTA分布式事务
myeclipse开发,导入即可用,可以参阅http://www.cnblogs.com/shamo89/p/7326718.html
SpringBoot+Atomikos分布式事务及多数据源动态切换,两种demo
SpringBoot+Atomikos分布式事务及多数据源动态切换,两种demo
SpringBoot重点详解--操作多数据源(JPA+JdbcTemplate)
目录 添加依赖与配置 配置数据源与JdbcTemplate 使用JdbcTemplate操作数据源 配置JPA 使用JPA操作数据源 启动类中测试 本文仅对如何在Springboot中使用Spring Data JPA和JdbcTemplate去操作多个HikariCP数据源进行简单示例和介绍,项目的完整目录层次如下图所示。 添加依赖与配置 为了使用Spring Data ...
SpringBoot多数据源配置事务
在多数据源中配置事务,其实对于SpringBoot来很简单,当然这个的前提是首先把多数据源都配好的情况下,如果不会多数据源配置,请看该系列 SpringBoot整合多数据源首先在启动类配置 @SpringBootApplication @EnableTransactionManagement public class AccountApplication { public static vo
jpa2.1配置多个数据源和事务及Executing an update/delete query异常处理
项目中需要连接2个数据库,配置完成后发现第二个事务不起作用,折腾了2天终于找到了原因,下面把解决步骤记录下来,方便自己以后和需要的朋友查看: 首先按照下面方法配置2个数据源并且配置好persistence.xml文件。 数据源配置:<?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.springframework.org
spring boot多数据源配置,多数据源事务
springboot目录 Spring Boot 源码深入分析 spring boot多数据源配置,多数据源事务 springboot 中数据源配置,连接池配置,源码剖析,如何选择连接池 阅读本文前 ,请先阅读笔者另一片文章Spring Boot 源码深入分析 需求描述 在业务开发中,需要读写分离,或者需要配置多个数据源,接下来我们看看在springboot中如何配置多数据...
springboot多数据源指定不同事务管理器
springboot多数据源指定不同事务管理器
Spring配置多数据源在配置事务后无效完美解决方案
在配置多数据源的时候,我们在配置事物的时候,一般通过AOP来进行数据源切换。Spring的事务与数据源是绑定的。也就说,如果你开启了事务,那么数据源已经绑定了。那么这个时候,你在去切换数据源就无效了。也就是说要想有效,那么久要在事务开启之前就把数据源切换好。网上有一些解决办法:而我们知道在Spring中有一个注解@Order。我们只要吧数据源切面上面加上@Order(0)就能完美的让切换数据源在事务
spring boot 2.1学习笔记【八】SpringBoot 2 集成 mysql多数据源, MySQL多数据源事务
spring boot 2.1 集成MySQL。 并且支持MySQL多数据源配置。 支持多数据源事务
springboot springjpa 从数据库动态加载多数据源 并随意切换
背景:项目本来就是springboot+springJpa的框架,连接池用的德鲁伊DruidDataSource。 想要在数据库配置多数据源,用户可以随便新增数据源,根据请求带的不同参数,controller层随意切换数据源,这样就可以同一套部署的代码,操作不同的数据库,有点 SaaS的味道,不过是各自独立的库。 1.配置默认数据源 2.启动之后加载数据库的数据源 并且加载到bean交给sp...
springboot+mybatis解决多数据源切换事务控制不生效的问题
网上好多的springboot的事务都是瞎扯,根本不起作用,后来通过各种渠道查证,springboot的生命式事务需要重写Transaction。追溯源代码:        查看源代码中DataSourceTransactionManager这个类       当我们配置了事物管理器和拦截Service中的方法后,每次执行Service中方法前会开启一个事务,并且同时会缓存一些东西:DataSou...
SpringBoot 采用自定义注解方式管理多数据源和事务
使用aop方式来实现功能 获取依赖的jar包,maven配置文件。使用MyBatis 管理数据库 org.springframework.boot spring-boot-starter-parent 2.0.5.RELEASE &amp;amp;lt;dependencies&amp;amp;gt; &amp;amp;lt;dependency&amp;amp;gt; &amp;amp;lt;groupId&amp;amp;gt; org.spr
Spring Boot多数据源及其事务管理配置
Spring Boot多数据源及其事务管理配置Spring Boot多数据源及其事务管理配置 准备工作 配置文件 JavaConfig 配置数据源 配置JdbcTemplate 使用 事务配置 开启事务管理功能 配置事务管理器 使用 准备工作先给我们的项目添加Spring-JDBC依赖和需要访问数据库的驱动依赖。配置文件spring.datasource.prod.driverClassName=c
springboot 多数据源aop+事物
在实际开发中,我们一个项目可能会用到多个数据库,通常一个数据库对应一个数据源。简要原理:1)DatabaseType列出所有的数据源的key---key2)DatabaseContextHolder是一个线程安全的DatabaseType容器,并提供了向其中设置和获取DatabaseType的方法3)DynamicDataSource继承AbstractRoutingDataSource并重写其中...
SpringBoot 2.x 整合 jpa实现多数据源
SpringBoot 2.x 在jpa中配置多数据源,与1.x还是存在稍许差别的,本示例基于SpringBoot2.0.6 1. 下载依赖 &amp;lt;dependency&amp;gt; &amp;lt;groupId&amp;gt;org.projectlombok&amp;lt;/groupId&amp;gt; &amp;lt;artifactId&amp;gt;lombok&amp;lt;/artifac...
spring boot+jpa+druid多数据源集成示例
添加pom依赖<dependencies> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-data-jpa</artifactId> </dependency> <depen
spring4+mybatis3+atomikos3.9多数据源分布式事务控制配置(备用)
pom文件关键jar一览 dependency> groupId>org.springframeworkgroupId> artifactId>spring-txartifactId> version>4.2.3.RELEASEversion> dependency> depe
Springboot+atomikos+jta实现分布式事务统一管理
一,什么是分布式事务? 分布式事务就是指事务的参与者、支持事务的服务器、资源服务器以及事务管理器分别位于不同的分布式系统的不同节点之上。以上是百度百科的解释,简单的说,就是一次大的操作由不同的小操作组成,这些小的操作分布在不同的服务器上,且属于不同的应用,分布式事务需要保证这些小操作要么全部成功,要么全部失败。本质上来说,分布式事务就是为了保证不同数据库的数据一致性。 说起分布式事务,提一下上...
SpringBoot使用jta+atomikos解决分布式事务
jta:Java Transaction API,即是java中对事务处理的api 即 api即是接口的意思 atomikos:Atomikos TransactionsEssentials 是一个为Java平台提供增值服务的并且开源类事务管理器 1、pom依赖 2、application.properties----&amp;gt;注意前缀 # Mysql 1 mysql.datasour...
SpringBoot 2.0 集成Atomikos、Durid 实现多数据源、分布式事务
使用JTA处理分布式事务 Spring Boot通过Atomkos或Bitronix的内嵌事务管理器支持跨多个XA资源的分布式JTA事务,当部署到恰当的J2EE应用服务器时也会支持JTA事务。 当发现JTA环境时,Spring Boot将使用Spring的 JtaTransactionManager 来管理事务。自动配置的JMS,DataSource和JPA beans将被升级以支持XA事务。可以...
Spring Boot 实践折腾记(19):自定义配置JPA使用多数据源
圣爱克苏佩里在《小王子》里写道:用心去看才看得清楚,本质的东西用肉眼是看不见的。 今天的内容有点多,希望你能耐心看完,因为会复习 Spring Boot 和 Sping 的相关内容。 Java持久性API(JPA)是一个对象关系映射(ORM)框架,它是Java EE平台的一部分。 JPA通过让开发人员使用面向对象的API,而不是手动编写SQL查询来简化数据访问层的实现。目前,流行的...
springBoot+JPA+Mysql项目中的事物管理,发生异常未回滚的问题
    今天在项目中调试代码的时候,方法中报错,当去数据库中查看该方法操作的那条数据记录时,发现数据已经被修改了。但是该方法整体是处在@Transactional事物管理之下的,也就是说,发生异常时,事物没有回滚。    经过查找原因,发现是Mysql表类型问题。Mysql表类型分为InnoDB和MyISAM,二者有本质上的区别。具体区别请链接到http://www.cnblogs.com/xio...
SpringBoot多数据源事务管理机制
写到多数据源事务来了就必定写成功了多数据源项目,可以参考我上一篇博客:SpringBoot根据包名进行区分使用多数据源   1、文章中的第七步其实就已经配置好了事务管理器到Spring容器了 按照套路来第二个数据源的事务管理Bean名字大家应该想到了那就是“test2TransactionManager”   2、是时候改装Service层加上事务注解了----&amp;gt;记着这里是个坑...
spring boot多数据源、读写分离( AOP动态)
项目地址springboot读写分离主要根据填充Spring Boot + Mybatis多数据源和动态数据源配置 文章中动态部分坑应用场景    读写分离,多数据源,主从库具体实现1、配置文件application.yml##多数据源 datasource:   #主库   master:     jdbcUrl: jdbc:mysql://localhost:3306/pa_yqs_game?...
Atomikos分布式事务中切换数据源
分布式XA事务管理,多数据源动态切换, atomikos
springboot多数据源,分布式事务管理atomikos,自动扫描service配置事务
1.使用的Atomikos:一个为Java平台提供增值服务的并且开源类事务管理器。2.数据源配置:@Configuration public class DatasourceConfig { @Bean(destroyMethod = &quot;close&quot;, name = DataSources.MASTER_DB) @Primary @Autowired public DataSou...
Spring JTA接口+Atomikos实现申明式分布式事务控制
1. 在pom文件引入atomikos依赖 用maven要简单一点,只需要加入两个依赖: com.atomikos transactions-jdbc 3.7.0 javax.transaction jta 1.1 2. 将需要分布式事务的数据源变成AtomikosDataSourceBean
springboot多数据源读写分离和主库数据源service层事务控制
读写分离如果撇开框架无非就是实现多个数据源,主库用写的数据源,从库用读的数据源。 因为想研究数据库读写分离和分库分表的设计,所以就自己搭建了一套springboot+druid+mybatis+aop 实现一主多从的设计。 第一步:首先需要自定义数据源的配置项,springboot默认解析的是带前缀spring.datasource.下面的配置项,为了不冲突,就直接定义datasource.当成我
springboot 2.1.2.RELEASE JPA多数据源
springboot 2.1.2.RELEASE JPA多数据源;
升级到SpringBoot2.0以上版本后,配置Jpa多数据源遇到的问题
最近在整理一个SpringBoot+有多数据源的Demo,方言有SQLite和Mysql,SpringBoot使用的版本是&amp;lt;version&amp;gt;1.5.10.RELEASE&amp;lt;/version&amp;gt;,想升级2.0以上的版本,于是出现了一系列版本冲突问题,小问题就不贴了,只贴处理最久的一个Jpa多数据源配置问题,在网上记录了该问题解决方法的鲜有几人。 &amp;lt;version&amp;gt;1....
Springboot--多数据源读写分离和主库数据源service层事务控制
因为想研究数据库读写分离和分库分表的设计,所以就自己搭建了一套springboot+druid+mybatis+aop 实现一主多从的设计。 第一步:首先需要自定义数据源的配置项,springboot默认解析的是带前缀spring.datasource.下面的配置项,为了不冲突,就直接定义datasource.当成我们的前缀, @ConfigurationProperties(prefix = “...
springboot+jpa 实现不同数据库的多数据源配置
废话不多说,直接看配置! 1、application.yml # 多数据源配置 #primary spring: primary: datasource: url: jdbc:mysql://xxx.xxx.xxx.xxx:3306/dico_dev?autoReconnect=true&amp;amp;autoReconnectForPools=true&amp;amp;useUn...
SpringBoot JPA 多数据源的使用
Spring Data JPA 注: 由于本文卸载github上,图片也都是在github上存储,这里指示引用了github图片地址. 可以去github去看完整的文章和源码:地址:https://github.com/itguang/weixin_sell/blob/master/weixin_sell/Spring%20Data%20JPA%E7%9A%84%E4%BD%BF%E7%94%A
基于spring boot项目的多数据源配置与分布式事务处理总结
多数据源配置 项目存在10个数据源,如下 core_biz 业务逻辑 数据库core_sys 系统设置 数据库fund_pool 资金池 数据库 分用户拆分了8个库 针对这10个数据源,分别进行创建 首先为业务逻辑数据库创建数据源,定义为Java Bean @Configuration及@Bean注解的使用不做赘述 @Configuration public c
第二篇:Spring Boot整合JPA、事务处理及AOP的使用
(一)Spring Boot整合JPA的具体步骤 搭建项目所需环境: ntelliJ IDEA 2018.1.3 x64 apache-maven-3.5.0 JDK1.8或JDK1.8以上,否则Spring Boot运行报错 项目文件结构图: 第一步,添加依赖 &amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;lt;!--引入jpa作用:操作数据库--&amp;amp;amp;amp;amp;
文章热词 设计制作学习 机器学习教程 Objective-C培训 交互设计视频教程 颜色模型
相关热词 mysql关联查询两次本表 native底部 react extjs glyph 图标 java异常学习 java学习异常