当前位置: 首页 > news >正文

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;
http://www.cnnetsun.cn/news/3404218.html

相关文章:

  • PalEdit:专业级PalWorld存档编辑工具深度解析
  • 为什么92%的ChatGPT学习者半年后停滞?——顶级工程师私藏的6类高复利资源(非公开渠道获取路径首次披露)
  • VASSAL引擎:3个实用技巧让传统桌面游戏在数字世界重生
  • 批量URL管理革命:告别浏览器标签页混乱的时代
  • PDF文档对比终极指南:3分钟掌握diff-pdf高效工作法
  • EasyOCR多语言OCR实战:从80+语言支持到生产级部署
  • ssl/https通信(opensssl接口)
  • 如何快速上手switch_user?5分钟实现用户无缝切换
  • switch_user:革命性用户切换工具,让开发与调试效率提升10倍
  • 小程序毕业设计-基于 SpringBoot + 小程序的在线答题系统 基于 SpringBoot 的在线考试测评系统的设计与实现(源码+LW+部署文档+全bao+远程调试+代码讲解等)
  • Python通达信数据获取终极方案:5分钟搭建你的股票分析系统
  • ChatGPT写周报月报终极指南:不是“怎么写”,而是“让领导觉得你早该升职”——融合行为心理学+组织政治学的高阶表达框架
  • AI TreasureBox未来规划:AI资源聚合平台的演进路线图和技术展望
  • ChatGPT写Python/JS/SQL代码不翻车的4类上下文锚点设计法(附GitHub高星模板库)
  • extuner社区贡献指南:如何参与开源性能调优工具开发 [特殊字符]
  • 2026年不锈钢水箱品牌推荐:哪家靠谱又耐用?
  • 火锅烤肉店怎么把流量导进自有小程序?餐宝盈GEO获客模式解析,含零代码SAAS、AI编程、源码定制交付
  • SingGuard-4b-GGUF未来展望:多模态AI安全技术的发展趋势与路线图
  • 5步掌握开源电路板查看器:告别.brd文件查看困境的终极指南
  • 如何构建高效多设备串流系统:Sunshine性能优化实战指南
  • 5分钟掌握Notepad++ Markdown实时预览插件:提升文档编写效率的终极方案
  • 语音处理领域的技术革新:ClearerVoice-Studio如何实现多模态AI语音增强与分离
  • 如何用Super Productivity实现300%效率提升:从时间消耗者到时间掌控者的转变之路
  • 如何轻松在电脑上运行任天堂3DS游戏:Citra模拟器完整教程
  • 基于单片机的智能楼道灯控制器系统设计
  • 抖音弹幕抓取终极指南:快速掌握DouyinBarrageGrab完整使用方法
  • FDA获批Baxfendy:醛固酮合酶抑制剂直击耐药高血压
  • 【小程序课程设计/毕业设计】基于 SpringBoot +小程序的个性化四六级学习推送小程序 基于 SpringBoot + 微信小程序的大学生英语能力提升系统的设计与实现【附源码、数据库、万字文档】
  • PLC工业控制核心:模块化架构与编程实践
  • PalEdit:打造你的专属PalWorld伙伴阵容