news 2026/7/15 16:12:00

Spring Boot:mybatis-plus + atomikos + druid 实现不同实例数据库的多数据源配置和分布式事务管理

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
Spring Boot:mybatis-plus + atomikos + druid 实现不同实例数据库的多数据源配置和分布式事务管理

想到工作上可能会用到多数据源,但是自己在这方面并不是很熟悉,于是在网上查阅了很多文章,结果发现,网上的文章要么版本太老有些过时,要么用的不是mybatis-plus而是mybaits,要么步骤繁琐、需要自己手动编写aop切面代码,要么在同一service层方法中只能使用@Transactional实现单个数据源的事务管理控制,总是觉得有点不太完美,所以综合了以上文章的不足之处和可以借鉴之处,在这里总结出了一个万能的、可以适应多方面需求的多数据源配置方法,以满足相对完整的、代码简练的分布式事务控制需求。现在分享给大家。

一. 从maven中导入必须用到的依赖

<dependencies><!-- mysql数据库依赖组件--><dependency><groupId>mysql</groupId><artifactId>mysql-connector-java</artifactId><version>8.0.20</version></dependency><!-- mybatis-plus依赖组件--><dependency><groupId>com.baomidou</groupId><artifactId>mybatis-plus-boot-starter</artifactId><version>3.3.1</version></dependency><!-- druid连接池依赖组件--><dependency><groupId>com.alibaba</groupId><artifactId>druid-spring-boot-starter</artifactId><version>1.1.22</version></dependency><!-- 多数据源的分布式事务控制--><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-jta-atomikos</artifactId></dependency></dependencies>

以上除了一些必须的、通用的依赖之外,还引入了atomikos依赖包,这是实现分布式事务管理的关键。

二. application.yml文件的配置

这个配置是可以很灵活的,数据源配置都是自定义字段,到时候方便能够在java代码中引用,以下是两个数据源的示范:

server:port:10010spring:autoconfigure:#停用druid连接池的自动配置exclude:com.alibaba.druid.spring.boot.autoconfigure.DruidDataSourceAutoConfiguredatasource:#选用druid的XADataSource数据源,因为这个数据源支持分布式事务管理type:com.alibaba.druid.pool.xa.DruidXADataSource#以下是自定义字段dynamic:primary:masterdatasource:master:url:jdbc:mysql://localhost:3306/local_test?useUnicode=true&characterEncoding=utf-8&allowMultiQueries=true&useSSL=false&zeroDateTimeBehavior=convertToNull&serverTimezone=Asia/Shanghai&autoReconnect=trueusername:rootpassword:rootdriver-class-name:com.mysql.cj.jdbc.Driverslave:url:jdbc:mysql://localhost:3307/remote_test?useUnicode=true&characterEncoding=utf-8&allowMultiQueries=true&useSSL=false&zeroDateTimeBehavior=convertToNull&serverTimezone=Asia/Shanghai&autoReconnect=trueusername:rootpassword:rootdriver-class-name:com.mysql.cj.jdbc.Drivervalidation-query:SELECT 1

因为我们把数据源相关的自动配置给关闭了,所以druid的自动配置项写在这里已经是无效的了,包括druid的监控功能在这里配置是不好使的。

三. Dao层配置

因为我们现在要使用的是多个数据源,所以在这些地方和单数据源配置相比,略微不同。
dao层结构如以下图:


因为这里模拟的两个数据源中这张表的结构都是相同的,所以实体类就共用同一个了。注意两个数据源表的实体类是可以放在同一个文件夹中的,但是每个数据源的mapper接口类和mapper.xml文件务必放在不同的文件夹中,比如本项目分别用了master和slave两个文件夹分别存放不同数据源的mapper接口和xml文件,这是实现数据源切换的关键。

贴出代码:

1.User
@Data@AllArgsConstructor@NoArgsConstructor@TableName("user_test")publicclassUser{@TableId(type=IdType.AUTO)privateIntegerid;privateStringmobile;privateStringpassword;
版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/7/15 16:11:46

PalEdit:专业级PalWorld存档编辑工具深度解析

PalEdit&#xff1a;专业级PalWorld存档编辑工具深度解析 【免费下载链接】PalEdit A simple tool for Editing and Generating Pals within PalWorld Saves 项目地址: https://gitcode.com/gh_mirrors/pa/PalEdit PalEdit是一款专为PalWorld设计的存档编辑工具&#xf…

作者头像 李华
网站建设 2026/7/15 16:11:43

为什么92%的ChatGPT学习者半年后停滞?——顶级工程师私藏的6类高复利资源(非公开渠道获取路径首次披露)

更多请点击&#xff1a; https://kaifayun.com 第一章&#xff1a;ChatGPT认知跃迁的底层逻辑断层诊断 当用户惊叹于ChatGPT“突然理解语境”或“自主推理”时&#xff0c;往往忽略了一个关键事实&#xff1a;其表层流畅性与底层符号操作之间存在结构性鸿沟。这种鸿沟并非算力…

作者头像 李华
网站建设 2026/7/15 16:11:21

VASSAL引擎:3个实用技巧让传统桌面游戏在数字世界重生

VASSAL引擎&#xff1a;3个实用技巧让传统桌面游戏在数字世界重生 【免费下载链接】vassal VASSAL, the open-source boardgame engine 项目地址: https://gitcode.com/gh_mirrors/va/vassal 你是否曾经渴望与远方的朋友一起玩心爱的战棋游戏&#xff0c;却受限于物理距…

作者头像 李华
网站建设 2026/7/15 16:11:12

批量URL管理革命:告别浏览器标签页混乱的时代

批量URL管理革命&#xff1a;告别浏览器标签页混乱的时代 【免费下载链接】Open-Multiple-URLs Browser extension for opening lists of URLs built with Vue.js on top of WebExtension with cross-browser support 项目地址: https://gitcode.com/gh_mirrors/op/Open-Mult…

作者头像 李华
网站建设 2026/7/15 16:10:22

PDF文档对比终极指南:3分钟掌握diff-pdf高效工作法

PDF文档对比终极指南&#xff1a;3分钟掌握diff-pdf高效工作法 【免费下载链接】diff-pdf A simple tool for visually comparing two PDF files 项目地址: https://gitcode.com/gh_mirrors/di/diff-pdf 在文档处理工作中&#xff0c;你是否经常需要对比不同版本的PDF文…

作者头像 李华
网站建设 2026/7/15 16:06:43

EasyOCR多语言OCR实战:从80+语言支持到生产级部署

EasyOCR多语言OCR实战&#xff1a;从80语言支持到生产级部署 【免费下载链接】EasyOCR Ready-to-use OCR with 80 supported languages and all popular writing scripts including Latin, Chinese, Arabic, Devanagari, Cyrillic and etc. 项目地址: https://gitcode.com/gh…

作者头像 李华