Spring boot 动态多数据源事物如果同步回滚 5C

目前我使用了 https://blog.csdn.net/xiazai353503200/article/details/79390879 这里的配置方法
但是目前只能单数据源事物回滚,但是我有需求是需要多数据源同时操作,一个出错同步事物回滚。有没有什么好的解决方案?

1

3个回答

当我们配置了事物管理器和拦截Service中的方法后,每次执行Service中方法前会开启一个事务,并且同时会缓存一些东西:DataSource、SqlSessionFactory、Connection等,所以,我们在外面再怎么设置要求切换数据源也没用,因为Conneciton都是从缓存中拿的,所以我们要想能够顺利的切换数据源,实际就是能够动态的根据DatabaseType获取不同的Connection,并且要求不能影响整个事物的特性。

1
qq_15396517
Victor枫 所以有没有什么好的解决方案?我现在业务场景是有存在这种需要同步回滚的情况的,如果用静态多数据源倒是可以,动态有什么好的解决方案吗?
一年多之前 回复

看看这篇 是不是会有些帮助 https://blog.csdn.net/sdmxdzb/article/details/77519725

0
qq_15396517
Victor枫 没有帮助,这种方式只能指定包路径更麻烦了。
一年多之前 回复
0
Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
其他相关推荐
springboot 多数据源回滚
@Transactional( value = "patrolTransationManager") 如果涉及多数据源后面必须标明数据源是哪个,否则无效; 但这里有个问题,如果一个方法中操作了多个数据源就没法分别回滚了,要使用jta才能    ...
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...
SpringBoot多数据源及事务配置
多数据源配置 其实多数据源的配置大体上跟Spring是相同的,不同之处仅在于SpringBoot推崇省略xml配置,取而代之使用JavaConfig来配置多数据源 针对目前所使用的Spring+MyBatis框架而言,数据源的配置最重要的两点是配置DataSource以及SqlSessionFactory,然而为了实现动态数据源我们还需要拓展AbstractRoutingDataSou
SpringBoot+MyBatis多数据源的事务开启
有一些项目需求需要多个数据源,但是这样的项目直接用事务注解不管用。下面是简单解决方法 @Configuration public class DataSourceConfig { /** * 系统管理用户的数据源 * @return */ @Primary @Bean(name = "mgrDataSource") @ConfigurationProperties(pre...
Spring boot 2.0 多数据源切换(事务问题)
如果你已经配置好了多数据源,那么事务的配置步骤跟单数据源一样。 即:            第一步:@EnableTransactionManagement(打开事务注解扫描)            第二步:为需要加事务的方法上添加@Transactional 对于网上大多数的说法,我不敢苟同。证据如下: 在不添加注解@Transactional时  添加完@Transaction...
spring 事物控制---多数据源与 atomikos 分布式事务配置(接之前未完成的部分)
解决在多个不同数据源中同时操作各自表时保证数据的完整性,用automikos分布式事务,例如操作A库表a,B库表b,如果b表操作失败,a,b 同时回滚
SpringBoot+Atomikos分布式事务及多数据源动态切换,两种demo
SpringBoot+Atomikos分布式事务及多数据源动态切换,两种demo
springboot+mybatis解决多数据源切换事务控制不生效的问题
网上好多的springboot的事务都是瞎扯,根本不起作用,后来通过各种渠道查证,springboot的生命式事务需要重写Transaction。追溯源代码:        查看源代码中DataSourceTransactionManager这个类       当我们配置了事物管理器和拦截Service中的方法后,每次执行Service中方法前会开启一个事务,并且同时会缓存一些东西:DataSou...
一个简单的Spring Boot框架中的多数据源和分布式事务例子
一个简单的Spring Boot框架中的多数据源和分布式事务例子。网上这方面的很多例子。或者太复杂,或者例子本身有问题,无法实际运行测试,坑太多。所以,写了这个例子。思路很简单,不同的DAO(mapper)包,对应不同的数据源,自动切换数据源,不需要人工编码干预。一个JTA事务,管理多个数据源,处理一个分布式事务。 方法简单,代码简单,配置简单。不采取注解管理事务,使用代码管理事务,更符合实际开发...
springboot整合多数据源及传统的分布式事务解决方法jta-atomikos
所谓的多数据源,简而言之就是:在一个项目中,有多个jdbc连接。 那么我们在在实际项目中,应该怎么样搭建多数据源并区分数据源呢? 举个例子 : 我们这个项目需要访问Test和Test1两个不同的数据库,我们可以采用分包结构,设置读取不同的数据源前缀,选择连接不同数据源。 分包结构 cn.itcats.test--- 访问Test数据库         dao         service ...
【十九】Spring Boot之分布式事务(JTA、Atomikos、Druid、Mybatis)
一、介绍 1.分布式、本地事务 1.本地事务:普通事务。只能保证在一个数据库上的操作ACID。 JDBC事务就是本地事务,通过connection对象管理。 2.分布式事务:两个及以上数据库源的事务(由每台数据库的本地事务组成的), 使事务可以跨越多个数据库。比如,A库的a1表和B库的b1表,在一个事务中,如果B库的b1表回滚了,A库的a1表也要回滚。 JTA事务支持分布式事务。JTA...
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;
spring 多数据源手动管理事务,最大程度保障数据一致性
模板代码如下: @Autowired private DataSourceTransactionManager transactionManager; public void insert(CardEntity card, String dataSourceCloud, String tableNo) { TransactionStatus status
springboot实现多数据源而且加上事务不会使aop切换数据源失效
用springboot 集成mybatis多数据源,用aop实现的动态切换,支持事务,不会使aop动态切换失效。注意:此代码不涉及分布式事务,如果需要分布式事务 需要采取其他方案。
SpringBoot+Mybatis+Druidd多数据源自动切换重写事物,以及AOP集成
最近在做一个项目,需要使用SpringBoot+Mybatis+Druid使用多数据源,前提条件是数据源的个数和名称不确定,是在application.yml文件中设定,在使用时根据条件动态切换。这样就不能像Druid官网提到的,通过ConfigurationProperties注解创建多个DruidDataSource,因为这样属于硬编码,添加一个数据源就要再添加代码,我考虑的是只使用一套构建D...
Spring boot配置的事务失效,出现错误数据不回滚解决方案
修改mysql数据库表的引擎: alter table demo engine=innodb; 如果报innodb不能使用:     解决方法:         1.关闭MySQL数据库   2.修改my.ini文件,把skip-innodb这行注释掉;default-storage-engine改成INNODB(运行不了,就用默认的MYISAM)      3.打开MySQL数据库
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(1)+jpa(hibernate)配置多数据源 分布式事务
springboot+jpa配置多数据源 功能情况: 实现系统对多数据源的操作。 实现系统对多数据源的分布式事务管理,包括事务的提交和回滚。 本文与网络上其他实现方案不一样,网络上其他很多方案都是基于将不同表数据存储到不同数据源中,从不同数据源读取相应数据。试想,如果要将同一数据实体如用户信息存储在不同数据源中(数据横向划分时),或者想根据条件查询不同数据源中的用户信息时,或者需要灵活实现...
spring boot+mybatis+druid 多数据源多库分布式事务
废话不多说,首先贴配置文件,需要引入pomxml &amp;lt;dependency&amp;gt; &amp;lt;groupId&amp;gt;com.alibaba&amp;lt;/groupId&amp;gt; &amp;lt;artifactId&amp;gt;druid-spring-boot-starter&amp;lt;/artifactId&amp;gt; &amp;lt;version&amp;gt;1.1.10&amp;lt;/versi...
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多数据源事务管理机制
写到多数据源事务来了就必定写成功了多数据源项目,可以参考我上一篇博客:SpringBoot根据包名进行区分使用多数据源   1、文章中的第七步其实就已经配置好了事务管理器到Spring容器了 按照套路来第二个数据源的事务管理Bean名字大家应该想到了那就是“test2TransactionManager”   2、是时候改装Service层加上事务注解了----&amp;gt;记着这里是个坑...
springboot多数据源即分布式事务解决方案
实现系统对多数据源的操作。 实现系统对多数据源的分布式事务管理,包括事务的提交和回滚。
springboot多数据源配置事务
Springboot单数据源时,事务直接在方法或者类上面使用@Transactional注解即可 对于多数据源,需要在@Transactional中制定数据源的transctionManager
Spring-Boot 多数据源配置+动态数据源切换+多数据源事物配置实现主从数据库存储分离
网上关于动态数据源配置的博文一搜一大堆,都是拿来主义,往往把需要的人弄得不是太明白,也没有个具体的好用的简单的demo例子供人参考,本篇,我也是拿来主义,,我拿来核心的core,进行demo案列整理,我只挑重要的部分讲,demo会在最后提供GitHub下载(博主 2018年3月16日14:26:47 注: 这种多数据源的动态切换确实可以解决数据的主从分库操作,但是却有一个致命的BUG,那就是事务不...
spring boot 2.1学习笔记【八】SpringBoot 2 集成 mysql多数据源, MySQL多数据源事务
spring boot 2.1 集成MySQL。 并且支持MySQL多数据源配置。 支持多数据源事务
Spring boot + Mybatis动态多数据源实现
在项目开发中,有一些场景需要同时使用多个数据库,并且需要能够根据需求能够动态切换,下面介绍一种基于注解+aop的方式。
Spring 多数据库事务的一致性(JTA 和 非JTA)
这里的项目是基于 Spring4.X + hibernate4.X架构的。最近的一个项目需要两个数据库,一个Oracle,一个是Sqlserver。业务中有一些需求需要跨库事务的一致,举个例子:合同签订保存到基于Oracle的ERP数据库,紧接着下发到Sqlserver的WMS数据库。 以前听说过JTA分布式事务,google到两种分布式框架:JOTM,atomikos。貌似JOTM简便点,...
SpringBoot多数据源事务管理
采用SpringBoot进行后端开发,项目里面配置了多台Mysql数据库,需要涉及场景为新增或修改数据时需要同时写入多台数据库,并保证事务一致,即要么所有数据库都写入成功入库,要么都写入失败回滚; 我们知道,Spring提供了事务管理,有声明式事务和编程式事务,声明式事务我们可以直接用@transactional注解作用于需要事务支持的方法上即可,该注解属性有: 当项目中存在多个数据源时...
Spring多数据源 多事务
因项目业务需要同时连接两个数据库,同时需要事务支持,参考网上资料试过实现spring接口来自动切换数据源,但是事务只有一个数据源可以使用,故采用如下方式配置,扫描所有map文件,通过类上方注解区分使用哪个数据源,通过在service方法中配置@Transactional(value=&quot;事务名&quot;)来判断使用哪个事务。一、数据源配置1、添加两个数据源    &amp;lt;bean id=&quot;ADataSour...
SpringBoot+Druid实现多数据源监控及事务控制
背景:一个项目中可能存在多数据源的情况,虽然微服务中,一般是单数据源,但是例如后台管理这些管理接口则不适合使用微服务来 提供接口,所以业务库也需要共存于后台管理项目,而后台管理项目中则有自己本身的一个权限数据库,则就会存在多数据源的情况。 思路:Spring本身已经有实现数据源切换的功能类,可以实现在项目运行时根据相应...
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
spring boot多数据源配置,多数据源事务
springboot目录 Spring Boot 源码深入分析 spring boot多数据源配置,多数据源事务 springboot 中数据源配置,连接池配置,源码剖析,如何选择连接池 阅读本文前 ,请先阅读笔者另一片文章Spring Boot 源码深入分析 需求描述 在业务开发中,需要读写分离,或者需要配置多个数据源,接下来我们看看在springboot中如何配置多数据...
3分钟搞定SpringBoot+Mybatis+druid多数据源和分布式事务
在一些复杂的应用开发中,一个应用可能会涉及到连接多个数据源,所谓多数据源这里就定义为至少连接两个及以上的数据库了。        下面列举两种常用的场景:         一种是读写分离的数据源,例如一个读库和一个写库,读库负责各种查询操作,写库负责各种添加、修改、删除。        另一种是多个数据源之间并没有特别明显的操作,只是程序在一个流程中可能需要同时从A数据源和B数据源中取数据或
springboot(2.X)实践----多个数据源并开启事务配置、自定义url拦截过滤器、druid配置、全局异常配置等汇总
目录 一、介绍 二、单个数据源以及事务的配置(springboot中) 三、单个数据源的事务如此简单,那多个呢? 1、这里我只使用两个数据源进行配置操作说明。导入依赖就不用说了吧 2、相关配置 2.1、数据库连接池--druid的配置(单个的druid监控,看新的配置就可以了) 2.2、全局异常的拦截配置 2.3、过滤拦截的配置 2.4 自定义本地配置文件读取配置 3、(...
Spring Boot 多数据源动态切换开启事务后,数据源切换失败
在项目中遇到需要使用多数据源的情况,解决办法是,使用注解,切面拦截来注入不同的dataSource。实现代码在底部。基本思路:在dao的方法前加上@TargetDataSource(ORDER_DATA_SOURCE)注解来表明使用的哪个数据源。问题:事务开启一般是在service中开启,事务开启后会导致数据源切换失败,数据源切换需要在事务开启前执行。解决:数据源切入点@Pointcut增加ser...
SpringBoot @Transactional 事务,运行异常进行事务回滚方法
直接上代码了: 1.首先需要在方法体上加上@Transactional表示支持事务 2.如果异常被抓起之后,需要回滚只能手动回滚,否则事务会认为异常已经被处理,就不在进行回滚     @Autowired     AcpgiftMapper acpgiftMapper;     @Transactional     public int tests() {         Acpgift e...
Spring Boot事物手动回滚
在Dao层的方法上添加 @Transactional 当要回滚时在代码中添加 TransactionAspectSupport.currentTransactionStatus().setRollbackOnly();
springBoot 事物回滚
在Controller里面给自己需要回滚方法上加上@Transactional注解,springBoot自带的事物回滚 只能捕捉RuntimeException异常才能进行事物的回滚。 数据库里面没加入数据,回滚事物验证成功...
Spring配置多数据源在配置事务后无效完美解决方案
在配置多数据源的时候,我们在配置事物的时候,一般通过AOP来进行数据源切换。Spring的事务与数据源是绑定的。也就说,如果你开启了事务,那么数据源已经绑定了。那么这个时候,你在去切换数据源就无效了。也就是说要想有效,那么久要在事务开启之前就把数据源切换好。网上有一些解决办法:而我们知道在Spring中有一个注解@Order。我们只要吧数据源切面上面加上@Order(0)就能完美的让切换数据源在事务