Seata入门系列【18】Seata集成Mybatis-Plus多数据源

news2025/3/3 5:50:29

1 前言

在使用单个服务,多数据源时,也存在分布式事务问题。

当单体系统需要访问多个数据库(实例)时就会产生分布式事务。 比如:用户信 息和订单信息分别在两个MySQL实例存储,用户管理系统删除用户信息,需要分别删除用户信息及用户的订单信 息,由于数据分布在不同的数据实例,需要通过不同的数据库链接去操作数据,此时产生分布式事务。 简言之:跨数据库实例产生分布式事务。

在这里插入图片描述

2 问题场景

参考此文档搭建一个多数据源项目Mybatis-Plus入门系列(19) -多数据源使用详解。

在插入订单数据时,模拟一个异常:

    @Override
    @DS("db_order")
    @Transactional
    public void insertOrder() {
        // 插入订单
        OrderTbl orderTbl = new OrderTbl();
        orderTbl.setUserId("12");
        orderTbl.setCommodityCode("IPHONE 13");
        orderTbl.setCount(1);
        orderTblMapper.insert(orderTbl);
        int i = 5 / 0;
    }

当进行业务操作时,订单发生异常 ,进行了回滚操作,因为在不同的数据库实例中,余额却扣除成功,此时发现数据不一致问题。

3 使用Seata 解决多数据源事务问题

3.1 集成Nacos Seata

参考该系列,给当前服务添加Nacos Seata 相关依赖,并启动Nacos Seata 。

3.2 多数据源集成Seata

多数据源集成Seata 时,主要是需要修改一下几个配置即可。

多数据源中,开启分布式事务,设置事务模式:

  datasource:
    # 多数据源
    dynamic:
      # 省略其他 
      # 开启分布式事务
      seata: true
      # 事务模式 为AT
      seata-mode: AT

seata 中,关闭数据源自动代理

seata:
  # 是否开启spring-boot自动装配,默认true,包括数据源的自动代理以及GlobalTransactionScanner初始化
  enabled: true
  # 是否开启数据源自动代理,默认开启
  enable-auto-data-source-proxy: false

3.3 测试

添加@GlobalTransactional注解。

    @GlobalTransactional
    @GetMapping("/test")
    public Object test() throws InterruptedException {
        accountTblService.reduceMoney();
        orderTblService.insertOrder();
        return "执行完毕!";
    }

测试发现,异常时,余额和订单服务都进行了回滚,集成成功。

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1157832.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Scala和Play WS库编写的爬虫程序

使用Scala和Play WS库编写的爬虫程序,该程序将爬取网页内容: import play.api.libs.ws._ import scala.concurrent.ExecutionContext.Implicits.global ​ object BaiduCrawler {def main(args: Array[String]): Unit {val url ""val proxy…

超详细的接口测试用例编写

自动化始终只是辅助测试工作的一个手段,对于测试人员而言,测试基础和测试用例的设计才是核心。如果测试用例的覆盖率或者质量不高,那将这部分用例实现为自动化用例的意义也就不大了。 那么,接口测试用例应该怎么编写呢&#xff1…

Powercli批量修改分布式交换机端口组

背景 需求&#xff1a; 批量修改虚拟机的分布式端口组 解决&#xff1a; 三条命令解决&#xff1a;先获取目标虚拟机、获取目标端口组、修改虚拟机端口组、检查虚拟机状态。 $vm Get-VM -Name <虚拟机名称> $portGroup Get-VirtualPortGroup -Name <端口组名称…

数据出境安全评估:重要性和实施策略

数据出境安全评估是确保数据安全和合规的重要环节。随着全球化的加速和信息技术的快速发展&#xff0c;企业和个人需要处理大量的数据&#xff0c;其中许多数据涉及个人隐私和企业机密。因此&#xff0c;数据出境安全评估对于保护数据安全和隐私权至关重要。 一、数据出境安全评…

深度学习_3 数据操作之线代,微分

线代基础 标量 只有一个元素的张量。可以通过 x torch.tensor(3.0) 方式创建。 向量 由多个标量组成的列表&#xff08;一维张量&#xff09;。比如 x torch.arange(4) 就是创建了一个1*4的向量。可以通过下标获取特定元素&#xff08;x[3]&#xff09;&#xff0c;可以通…

什么是Webpack的热模块替换(Hot Module Replacement)?它的作用是什么?

聚沙成塔每天进步一点点 ⭐ 专栏简介 前端入门之旅&#xff1a;探索Web开发的奇妙世界 欢迎来到前端入门之旅&#xff01;感兴趣的可以订阅本专栏哦&#xff01;这个专栏是为那些对Web开发感兴趣、刚刚踏入前端领域的朋友们量身打造的。无论你是完全的新手还是有一些基础的开发…

springboot医院绩效考核系统源码

医院绩效考核系统是一种以人力资源管理为基础&#xff0c;选用适合医院组织机构属性的绩效理论和方法&#xff0c;基于医院战略目标&#xff0c;构建全方位的绩效考评体系&#xff0c;在科学、合理的绩效管理体系基础上&#xff0c;采用科学管理的方法&#xff0c;如平衡计分卡…

CS224W4.2——计算PageRank

在介绍了PageRank及其公式之后&#xff0c;我们讨论了求解PageRank的方法。我们提出了求解图的随机邻接矩阵(即PageRank)的主特征向量的幂次迭代方法。此外&#xff0c;我们在之前的PageRank实现中引入了两个问题:死角&#xff08;dead ends&#xff09;(没有外部链接的节点)和…

HWebkit库的程序示例

HWebkit库的爬虫程序&#xff0c;并且能够使用指定的服务器。以下是代码的每一行的中文解释&#xff1a; import HWebkit import Network.HTTP.Client import Network.HTTP.Client.TLS import Data.Text.Encoding ​ -- 创建服务器的连接&#xff0c;使用的端口和主机是 proxy…

(免费领源码)Java#springboot#Mysql智慧图书馆系统34117-计算机毕业设计项目选题推荐

摘 要 大数据时代下&#xff0c;数据呈爆炸式地增长。为了迎合信息化时代的潮流和信息化安全的要求&#xff0c;利用互联网服务于其他行业&#xff0c;促进生产&#xff0c;已经是成为一种势不可挡的趋势。在图书馆管理的要求下&#xff0c;开发一款整体式结构的智慧图书馆系统…

经营抖音小店的新手需要遵守的规则和注意事项

作为新手开抖音小店&#xff0c;四川不若与众帮你整了需要注意以下规则&#xff1a; 1. 注重产品质量&#xff1a;提供高质量的产品是吸引用户的关键。确保商品的质量可靠&#xff0c;符合标准&#xff0c;避免虚假宣传或低劣产品的问题。 2. 诚信经营&#xff1a;尽量遵循交易…

【JavaEE初阶】 文件内容的读写 —— 数据流

文章目录 &#x1f334;数据流的概念&#x1f6a9;数据流分类 &#x1f333;字节流的读写&#x1f6eb;InputStream&#xff08;从文件中读取字节内容)&#x1f6a9;实例一&#x1f6a9;实例二&#x1f6a9;利用 Scanner 进行字符读取 &#x1f6ec;OutputStream(向文件中写内容…

数据持久化的利器,Python中的pickle模块详解

Python数据序列化和反序列化时&#xff0c;pickle模块是一个非常有用的工具。它允许将Python对象转换为字节流&#xff0c;以便存储在文件中或通过网络传输&#xff0c;然后将这些字节流重新转换回Python对象。 什么是Pickle&#xff1f; pickle是Python标准库中的一个模块&a…

2023最新最全【Android studio】安装入门教程(非常详细)手把手教你安装使用!【附安装包】

软件下载 软件&#xff1a;Android Studio版本&#xff1a;2022语言&#xff1a;英文大小&#xff1a;1G安装环境&#xff1a;Win11/Win10/Win8/Win7硬件要求&#xff1a;CPU2.0GHz 内存4G(或更高&#xff09;下载通道①百度网盘丨下载链接&#xff1a;https://pan.baidu.com/…

go中“哨兵错误”的由来及使用建议

“哨兵错误&#xff08;sentinel error&#xff09;”这个词的出处。之前我也只是在一些书籍和资料中见到过&#xff0c;也没深究。当这个网友问了我之后&#xff0c;就深入的翻了翻资料&#xff0c;在golang的官方博客中找到了这个词的提法&#xff0c;也算是比较官方的了吧。…

公众号快速配置AI智能问答,在公众号集成类似ChatGPT的AI聊天机器人

目录 前言 一、使用步骤 1、助手体验 2、助手训练 2、公众号集成 前言 今天无意间发现一个名为“天书AI”的产品&#xff0c;是一款AI知识库产品&#xff0c;可以集成在微信公众号消息接口中。可以将公众号基于自己的知识内容升级为智能问答工具&#xff0c;提供类似ChatGPT的…

苹果相机怎么磨皮 苹果手机怎么磨皮

相信使用苹果相机的小伙伴都有这样的疑惑&#xff0c;苹果相机怎么磨皮&#xff1f;其实可以通过相机的参数进行设置从而达到磨皮的效果&#xff0c;如果觉得相机自带的设置磨皮效果不够好&#xff0c;可以下载磨皮软件来对照片磨皮。今天的文章就来给大家介绍苹果相机怎么磨皮…

MetaAI提出全新验证链框架CoVE,大模型也可以通过“三省吾身”来缓解幻觉现象

​ 论文名称&#xff1a; Chain-of-Verification Reduces Hallucination in Large Language Models 论文链接&#xff1a; https://arxiv.org/abs/2309.11495 曾子曰&#xff1a;“吾日三省吾身” --出自《论语学而》 时至今日&#xff0c;生成幻觉&#xff08;hallucination&…

LeetCode刷题---合并两个有序数组

该题用到了归并排序&#xff0c;正常的归并排序算法是两个数组依次比对元素大小&#xff0c;最后按照要求将比对结果放入新的数组中&#xff0c;但是此题题目中要求将结果放入第一个数组中。 解题思路:可以定义两个指针&#xff0c;分别指向两个数组中的有效元素的最后一个元素…

什么是TCP三次握手和四次挥手?

三次握手是建立TCP连接时使用的一种协议。它确保了通信双方可以建立可靠的连接。大致流程如下&#xff1a; 第一次握手&#xff08;SYN&#xff09;&#xff1a;客户端发送一个带有SYN标志的请求连接&#xff08;SYN包&#xff09;给服务器&#xff0c;并指明客户端的初始序列号…