八、Seata的XA模式

目录

  • 八、Seata的XA模式
    • 8.3 ==XA模式多数据源场景==
      • 1 环境搭建
      • 2、使⽤XA模式解决事务

八、Seata的XA模式

8.3 XA模式多数据源场景

1 环境搭建

  • 建库建表
    代码的db.sql中

  • 创建工程
    在这里插入图片描述

  • 添加依赖

<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId></dependency><dependency><groupId>org.mybatis.spring.boot</groupId><artifactId>mybatis-spring-boot-starter</artifactId><version>2.2.1</version></dependency><dependency><groupId>mysql</groupId><artifactId>mysql-connector-java</artifactId></dependency><dependency><groupId>com.alibaba</groupId><artifactId>druid</artifactId><version>1.2.8</version></dependency>
  • 编写主配置类
@SpringBootApplication
public class XAMultiApp {public static void main(String[] args) {SpringApplication.run(XAMultiApp.class);}
}
  • 配置文件
server:port: 8080
spring:datasource:nong:driver-class-name: com.mysql.cj.jdbc.Driverurl: jdbc:mysql://192.168.239.11:3306/nonghang?serverTimezone=UTCusername: rootpassword: houchenjian:driver-class-name: com.mysql.cj.jdbc.Driverurl: jdbc:mysql://192.168.239.11:3306/jianhang?serverTimezone=UTCusername: rootpassword: houchen
logging:level:com:hc: debug
  • mapper + 业务代码
    见上述 gitee 仓库

  • 编写多数据源配置

@SpringBootConfiguration
@MapperScans({@MapperScan(basePackages = "com.hc.nong", sqlSessionFactoryRef = "nongFactory"), @MapperScan(basePackages = "com.hc.jian", sqlSessionFactoryRef = "jianFactory")})
public class DbConfig {@Bean@ConfigurationProperties(prefix = "spring.datasource.nong")public DruidDataSource nongDataSource() {return new DruidDataSource();}@Bean@ConfigurationProperties(prefix = "spring.datasource.jian")public DruidDataSource jianDataSource() {return new DruidDataSource();}/*** 配置NongSqlSession*/@Beanpublic SqlSessionFactory nongFactory(@Qualifier("nongDataSource") DruidDataSource dataSource) throws Exception {SqlSessionFactoryBean sqlSessionFactoryBean = new SqlSessionFactoryBean();sqlSessionFactoryBean.setDataSource(dataSource);return sqlSessionFactoryBean.getObject();}@Beanpublic SqlSessionFactory jianFactory(@Qualifier("jianDataSource") DruidDataSource dataSource) throws Exception {SqlSessionFactoryBean sqlSessionFactoryBean = new SqlSessionFactoryBean();sqlSessionFactoryBean.setDataSource(dataSource);return sqlSessionFactoryBean.getObject();}}

2、使⽤XA模式解决事务

  • 添加依赖
<dependency><groupId>io.seata</groupId><artifactId>seata-spring-boot-starter</artifactId><version>1.5.2</version></dependency>
  • yaml文件
    注意:
    我们添加的是seata-spring-boot-starter
    依赖⽀持registry.conf和 file.conf 同时也⽀持把配置编写在application.yml中

但是:
当我们添加的是seata-all依赖时 我们需要添加registry.conf和 file.conf 不能使⽤yml格式配置
因为seata-all没有⾃动配置 所以依赖的不同的包 配置是不同的

seata:enabled: trueregistry:type: fileconfig:type: fileservice:vgroup-mapping:default_tx_group: defaultgrouplist:default: 127.0.0.1:8091disable-global-transaction: false #默认为false 可以不配置application-id: abc # 初始化TM和RM使用tx-service-group: default_tx_groupenable-auto-data-source-proxy: true # 设置datasource自动代理data-source-proxy-mode: XA          # 指定代理模式 XA
  • ⾃动代理的⽅式
    就是上面yaml文件的最后两行配置

  • 业务代码上面添加注解

   @GlobalTransactional(rollbackFor = Exception.class)public void transfer(int fromId, int toId, double monoey) {nongMapper.reduceMoney(fromId, monoey);int i = 10 / 0;jianMapper.increaseMoney(toId, monoey);}
  • 测试
    调用接口 http://localhost:8080/user/transfer?fromId=1&toId=1&monoey=100,查看日志
    在这里插入图片描述

⼿动代理的⽅式

  • 修改配置关闭⾃动代理
    在这里插入图片描述

  • ⼿动构建代理数据源

@SpringBootConfiguration
@MapperScans({@MapperScan(basePackages = "com.hc.nong", sqlSessionFactoryRef = "nongFactory"), @MapperScan(basePackages = "com.hc.jian", sqlSessionFactoryRef = "jianFactory")})
public class DbConfig {@Bean@ConfigurationProperties(prefix = "spring.datasource.nong")public DruidDataSource nongDataSource() {return new DruidDataSource();}@Bean@ConfigurationProperties(prefix = "spring.datasource.jian")public DruidDataSource jianDataSource() {return new DruidDataSource();}/*** ⼿动配置农⾏代理数据源* @param dataSource* @return*/@Beanpublic DataSourceProxyXA nongXA(@Qualifier("nongDataSource") DruidDataSource dataSource){return new DataSourceProxyXA(dataSource);}/*** ⼿动代理建⾏数据源* @param dataSource* @return*/@Beanpublic DataSourceProxyXA jianXA(@Qualifier("jianDataSource") DruidDataSource dataSource){return new DataSourceProxyXA(dataSource);}/*** 配置NongSqlSession*//*@Beanpublic SqlSessionFactory nongFactory(@Qualifier("nongDataSource") DruidDataSource dataSource) throws Exception {SqlSessionFactoryBean sqlSessionFactoryBean = new SqlSessionFactoryBean();sqlSessionFactoryBean.setDataSource(dataSource);return sqlSessionFactoryBean.getObject();}@Beanpublic SqlSessionFactory jianFactory(@Qualifier("jianDataSource") DruidDataSource dataSource) throws Exception {SqlSessionFactoryBean sqlSessionFactoryBean = new SqlSessionFactoryBean();sqlSessionFactoryBean.setDataSource(dataSource);return sqlSessionFactoryBean.getObject();}*//*** 配置NongSqlSession*/@Beanpublic SqlSessionFactory nongFactory(@Qualifier("nongXA") DataSource dataSource) throws Exception {SqlSessionFactoryBean sqlSessionFactoryBean = new SqlSessionFactoryBean();sqlSessionFactoryBean.setDataSource(dataSource);return sqlSessionFactoryBean.getObject();}@Beanpublic SqlSessionFactory jianFactory(@Qualifier("jianXA") DataSource dataSource) throws Exception {SqlSessionFactoryBean sqlSessionFactoryBean = new SqlSessionFactoryBean();sqlSessionFactoryBean.setDataSource(dataSource);return sqlSessionFactoryBean.getObject();}
}

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

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

相关文章

VBA技术资料MF96:单字段多条件高级筛选

我给VBA的定义&#xff1a;VBA是个人小型自动化处理的有效工具。利用好了&#xff0c;可以大大提高自己的工作效率&#xff0c;而且可以提高数据的准确度。我的教程一共九套&#xff0c;分为初级、中级、高级三大部分。是对VBA的系统讲解&#xff0c;从简单的入门&#xff0c;到…

Ribbon使用

Ribbon &#xff1a;处理客户端负载均衡和容错的解决方案 配置Ribbon的负载均衡 Rule接口&#xff1a; 定义客户端负载均衡的规则 RandomRule :随机选择RoundRobinRuleZoneAvoidanceRule 配置ribbon的负载均衡策略 在配置文件中配置 user-center:ribbon:NFLoadBalancerRul…

三阶魔方七步解法-最后还原顶层顶角(不是顶棱)

主要区别&#xff0c;最后一步是 顶层十字棱角已经还原&#xff0c;四个顶角的位置正确&#xff0c;但四个顶角的颜色没有对应。 因为现在基本都是6步还原法&#xff08;找什么小鱼&#xff0c;眼睛&#xff09;&#xff0c;是先还原顶层使颜色一致&#xff0c;最后还原顶棱。但…

云原生之深入解析使用Telepresence轻松在本地调试和开发Kubernetes应用程序

一、 准备 telepresence 下载&#xff1a;https://www.telepresence.io/docs/latest/install/kubectl 下载&#xff1a;https://kubernetes.io/docs/tasks/tools/ 二、版本检测 $telepresence version Client: v2.5.3 (api v3) Root Daemon: not running User Daemon: not r…

leetcode面试经典二分系列刷题心得

闲来无事巩固算法基础&#xff0c;发现自己的二分几乎从来没系统刷过题&#xff0c;基础很是薄弱。 二分法不愧称为新人杀手&#xff0c;刷起来很是吃力&#xff0c;感觉明明学了几套二分模板&#xff0c;但是却不知道如何去运用&#xff0c;很多读者在初次尝试刷二分题时候&a…

24款奔驰C260L升级C63包围 典型的花小钱办大事

今天店里来了一台24款奔驰C260L 一提车就过来升级 我们公司还有包上牌服务 车主说 升级完包围 帮忙安排一下 原车的包围 没有那么霸气 特别是后杠 光溜溜的 升级后 四出尾喉 尾翼 直接牌面就起来了 星骏汇小许Xjh15863

Android12-RK3588_s-开机动画

目录 一、实现自定义开机动画 步骤一&#xff1a;准备 bootanimation.zip 步骤二&#xff1a;将 bootanimation.zip 放到 /system/media/bootanimation.zip下 步骤三&#xff1a;重启即可 二、注意事项 2.1 bootanimation.zip 压缩 2.2 bootanimation.zip 存放 2.3 boo…

打印机设置发票收据打印

由于各种打印机型号不一样&#xff0c;设置方式打印效果出入也很大&#xff0c;存在打印不全问题&#xff0c;发票右侧小数点后面的数字打印不出来、位置靠上下左右登问题&#xff0c;比较通用的设置方式如下&#xff1a; 首先找到控制面板&#xff0c;找到设备和打印机 进入到…

【C语言】printf()函数详解,手把手教你,保姆级!!!

目录 基本用法 printf()函数--占位符 占位符大全 printf()函数--限定宽度 printf()函数--正负--限定小数 printf()函数--输出部分字符串 总结 【C语言】printf()函数详解&#xff0c;手把手教你&#xff0c;保姆级&#xff01;&#xff01;&#xff01; 基本用法 printf()…

openoffice安装

安装openoffice 下载安装包 建议去官网下载&#xff0c;这里给出官网地址&#xff1a;https://www.openoffice.org/download/ 这里以linux为例&#xff0c;所以我下载的是unbantu的版本(deb) 解压安装包 tar -zxvf Apache_OpenOffice_4.1.13_Linux_x86-64_install-deb_zh-…

【Hive】【Hadoop】工作中常操作的笔记-随时添加

文章目录 1、Hive 复制一个表:2、字段级操作3、hdfs 文件统计 1、Hive 复制一个表: 直接Copy文件 create table new_table like table_name;hdfs dfs -get /apps/hive/warehouse/ods.db/table_nameload data local inpath /路径 into table new_table;修复表&#xff1a; m…

25.Java程序设计-基于SSM框架的微信小程序校园求职系统的设计与实现

1. 引言 1.1 背景 介绍校园求职系统的背景&#xff0c;说明为什么设计这个系统以及系统的重要性。 1.2 研究目的 阐述设计基于SSM框架的微信小程序校园求职系统的目标和意义。 2. 需求分析 2.1 行业背景 分析校园求职行业的特点和需求&#xff0c;以及目前市场上同类系统…

翻译: LLM工具使用和代理Tool use and agents

欢迎来到本周的最后一个视频。在这个视频中&#xff0c;我想与您分享LLM&#xff08;大型语言模型&#xff09;开始能够使用工具的情况&#xff0c;以及讨论一下前沿的“代理”主题&#xff0c;这是让LLM自己决定下一步采取什么行动的领域。让我们来看看。在早期的食物订单接收…

【C 剑指offer】有序整型矩阵元素查找 {杨氏矩阵}

目录 题目内容&#xff1a; 思路&#xff1a; 图形演示&#xff1a; 复杂度分析 C源码&#xff1a; /** *************************************************************************** ******************** ********************* ******…

遥感论文 | Scientific Reports | 一种显著提升遥感影像小目标检测的网络!

论文题目&#xff1a;MwdpNet: towards improving the recognition accuracy of tiny targets in high-resolution remote sensing image论文网址&#xff1a;https://www.nature.com/articles/s41598-023-41021-8 摘要 提出MwdpNet&#xff0c;以提高对高分辨率遥感&#xf…

connect: Network is unreachable问题解决

第一步&#xff1a;查看ifcfg-ens33配置文件 cd /etc/sysconfig/network-scripts/ cat ifcfg-ens33 发现问题&#xff1a;GATEWAY写错成GATWAY 第二步&#xff1a;修改 vim ifcfg-ens33 第三步&#xff1a;检测是否成功 ping baidu.com 成功&#xff01;

Mysql 的ROW_NUMBER() 和分区函数的使用 PARTITION BY的使用

Mysql 的ROW_NUMBER() 和分区函数的使用 PARTITION BY的使用 描述&#xff1a; 遇到了一个需求&#xff0c;需要查询用户id和计划id&#xff0c;但是人员id的是重复&#xff0c;我想把人员id去重&#xff0c;支取一个。自然而然的就想到了 SELECT DISTINCT prj_plan.last_mon…

分布式事务--初识Seata和TC部署

1.Seata介绍 Seata是 2019 年 1 月份蚂蚁金服和阿里巴巴共同开源的分布式事务解决方案。致力于提供高性能和简单易用的分布式事务服务&#xff0c;为用户打造一站式的分布式解决方案。 官网地址&#xff1a;Seata | Seata&#xff0c;其中的文档、播客中提供了大量的使用说明…

Python读写arxml文件

文章目录 前言一、XML简介二、XML文件结构三、Python读取xml文件安装ElementTree库读取xml文件四、Python写入xml文件前言 本文主要通过介绍arxml文件,为后续python脚本开发奠定基础。 arxml是AUTOSAR XML的简称,是一个通用的配置/数据库文件,实质是一个xml文件。 ①更规范…

Mysql查询条件为大于时,不走索引失效场景

如下 where a>1 and b2 是不走索引。 因为a>1 &#xff0c; (这里说的是&#xff0c;a是走了索引&#xff0c;但是b没有走&#xff0c;为什么了&#xff1f;因为b只有在a相同时&#xff0c;b才有序,也就是说这个联合索引只用到了一半)的数据是无序的(1 4 1 2)&#xff0…