多数据源解决分布式事务
创始人
2024-04-23 04:18:17
0

 环境:idea+springboot2.x

场景:调用addUser方法执行对两个数据库的表操作,如果方法出现异常就回滚

 

 

user数据库中的users表

 

order数据库中的order_number表

 

将各自的事务管理器改为统一事务管理器即可

第一步pom文件配置jta atomikos 依赖

  org.springframework.bootspring-boot-starter-weborg.mybatis.spring.bootmybatis-spring-boot-starter2.2.2mysqlmysql-connector-java5.1.47org.projectlomboklombokorg.projectlomboklombok1.16.10org.springframework.bootspring-boot-starter-jta-atomikos

第二步yml配置

spring:datasource:member:url: jdbc:mysql://localhost:3306/user?useSSL=falseusername: rootpassword: rootboorowConectionTimeout: 30loginTimeout: 30maintenanceInterval: 60maxIdleTime: 60maxLifetime: 20000maxPoolSize: 25minPoolSize: 3uniqueResourceName: orderDatasourceorder:url: jdbc:mysql://localhost:3306/order?useSSL=falseusername: rootpassword: rootborrowConnectionTimeout: 30loginTimeout: 30maintenanceInterval: 60maxIdleTime: 60maxLifetime: 20000maxPoolSize: 25minPoolSize: 3uniqueResourceName: memberDatasource

第三步配置编写MemberConfig和OrdeerConfig配置类

@Data
@ConfigurationProperties(prefix = "spring.datasource.member")
public class MemberConfig {private String url;private String userName;private String passWord;private int minPoolSize;private int maxPoolSize;private int maxLifetime;private int borrowConnectionTimeout;private int loginTimeout;private int maintenanceInterval;private int maxIdleTime;private String testQuery;private String uniqueResourceName;
}
@Data
@ConfigurationProperties(prefix = "spring.datasource.order")
public class OrderConfig {private String url;private String userName;private String passWord;private int minPoolSize;private int maxPoolSize;private int maxLifetime;private int borrowConnectionTimeout;private int loginTimeout;private int maintenanceInterval;private int maxIdleTime;private String testQuery;private String uniqueResourceName;
}

第五步将DataSource改为xaDataSource

以MemberDataSourceConfig为例,OrderDataSourceConfig操作步骤相同

/*** 创建DataSource 将我们的数据源统一交给我们的全局xa事务管理* @return*/
@Bean(name = "memberDataSource")
public DataSource memberDataSource(MemberConfig memberConfig) throws SQLException {// 1.创建我们的xaDataSourceMysqlXADataSource mysqlXADataSource = new MysqlXADataSource();mysqlXADataSource.setUrl(memberConfig.getUrl());mysqlXADataSource.setPinGlobalTxToPhysicalConnection(true);mysqlXADataSource.setPassword(memberConfig.getPassWord());mysqlXADataSource.setUser(memberConfig.getUserName());mysqlXADataSource.setPinGlobalTxToPhysicalConnection(true);// 2.注册到全局事务AtomikosDataSourceBean xaDataSource = new AtomikosDataSourceBean();xaDataSource.setXaDataSource(mysqlXADataSource);xaDataSource.setUniqueResourceName(memberConfig.getUniqueResourceName());xaDataSource.setMinPoolSize(memberConfig.getMinPoolSize());xaDataSource.setMaxPoolSize(memberConfig.getMaxPoolSize());xaDataSource.setMaxLifetime(memberConfig.getMaxLifetime());xaDataSource.setBorrowConnectionTimeout(memberConfig.getBorrowConnectionTimeout());xaDataSource.setLoginTimeout(memberConfig.getLoginTimeout());xaDataSource.setMaintenanceInterval(memberConfig.getMaintenanceInterval());xaDataSource.setMaxIdleTime(memberConfig.getMaxIdleTime());xaDataSource.setTestQuery(memberConfig.getTestQuery());//        return DataSourceBuilder.create().build(); // 原始的DataSourcereturn xaDataSource; // 改为xaDataSource
}

第六步关闭事务管理器

 以MemberDataSourceConfig为例,OrderDataSourceConfig操作步骤相同

 

执行代码

 

 

 此时表中数据(已刷新)

 放行

 此时表中数据(已刷新)

 事务回滚

 

输入合法数据进行测试

 直接放行

数据已加入

 页面信息

 

相关内容

热门资讯

银河麒麟V10SP1高级服务器... 银河麒麟高级服务器操作系统简介: 银河麒麟高级服务器操作系统V10是针对企业级关键业务...
【NI Multisim 14...   目录 序言 一、工具栏 🍊1.“标准”工具栏 🍊 2.视图工具...
不能访问光猫的的管理页面 光猫是现代家庭宽带网络的重要组成部分,它可以提供高速稳定的网络连接。但是,有时候我们会遇到不能访问光...
AWSECS:访问外部网络时出... 如果您在AWS ECS中部署了应用程序,并且该应用程序需要访问外部网络,但是无法正常访问,可能是因为...
Android|无法访问或保存... 这个问题可能是由于权限设置不正确导致的。您需要在应用程序清单文件中添加以下代码来请求适当的权限:此外...
AWSElasticBeans... 在Dockerfile中手动配置nginx反向代理。例如,在Dockerfile中添加以下代码:FR...
月入8000+的steam搬砖... 大家好,我是阿阳 今天要给大家介绍的是 steam 游戏搬砖项目,目前...
​ToDesk 远程工具安装及... 目录 前言 ToDesk 优势 ToDesk 下载安装 ToDesk 功能展示 文件传输 设备链接 ...
北信源内网安全管理卸载 北信源内网安全管理是一款网络安全管理软件,主要用于保护内网安全。在日常使用过程中,卸载该软件是一种常...
AWS管理控制台菜单和权限 要在AWS管理控制台中创建菜单和权限,您可以使用AWS Identity and Access Ma...