多数据源解决分布式事务
创始人
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操作步骤相同

 

执行代码

 

 

 此时表中数据(已刷新)

 放行

 此时表中数据(已刷新)

 事务回滚

 

输入合法数据进行测试

 直接放行

数据已加入

 页面信息

 

相关内容

热门资讯

保存时出现了1个错误,导致这篇... 当保存文章时出现错误时,可以通过以下步骤解决问题:查看错误信息:查看错误提示信息可以帮助我们了解具体...
汇川伺服电机位置控制模式参数配... 1. 基本控制参数设置 1)设置位置控制模式   2)绝对值位置线性模...
不能访问光猫的的管理页面 光猫是现代家庭宽带网络的重要组成部分,它可以提供高速稳定的网络连接。但是,有时候我们会遇到不能访问光...
表格中数据未显示 当表格中的数据未显示时,可能是由于以下几个原因导致的:HTML代码问题:检查表格的HTML代码是否正...
本地主机上的图像未显示 问题描述:在本地主机上显示图像时,图像未能正常显示。解决方法:以下是一些可能的解决方法,具体取决于问...
表格列调整大小出现问题 问题描述:表格列调整大小出现问题,无法正常调整列宽。解决方法:检查表格的布局方式是否正确。确保表格使...
不一致的条件格式 要解决不一致的条件格式问题,可以按照以下步骤进行:确定条件格式的规则:首先,需要明确条件格式的规则是...
Android|无法访问或保存... 这个问题可能是由于权限设置不正确导致的。您需要在应用程序清单文件中添加以下代码来请求适当的权限:此外...
【NI Multisim 14...   目录 序言 一、工具栏 🍊1.“标准”工具栏 🍊 2.视图工具...
银河麒麟V10SP1高级服务器... 银河麒麟高级服务器操作系统简介: 银河麒麟高级服务器操作系统V10是针对企业级关键业务...