Spring Boot:mybatis-plus + atomikos + druid 实现不同实例数据库的多数据源配置和分布式事务管理 📅 发布时间:2026/7/15 16:10:24 👁️ 浏览次数: 想到工作上可能会用到多数据源,但是自己在这方面并不是很熟悉,于是在网上查阅了很多文章,结果发现,网上的文章要么版本太老有些过时,要么用的不是mybatis-plus而是mybaits,要么步骤繁琐、需要自己手动编写aop切面代码,要么在同一service层方法中只能使用@Transactional实现单个数据源的事务管理控制,总是觉得有点不太完美,所以综合了以上文章的不足之处和可以借鉴之处,在这里总结出了一个万能的、可以适应多方面需求的多数据源配置方法,以满足相对完整的、代码简练的分布式事务控制需求。现在分享给大家。一. 从maven中导入必须用到的依赖dependencies!-- mysql数据库依赖组件--dependencygroupIdmysql/groupIdartifactIdmysql-connector-java/artifactIdversion8.0.20/version/dependency!-- mybatis-plus依赖组件--dependencygroupIdcom.baomidou/groupIdartifactIdmybatis-plus-boot-starter/artifactIdversion3.3.1/version/dependency!-- druid连接池依赖组件--dependencygroupIdcom.alibaba/groupIdartifactIddruid-spring-boot-starter/artifactIdversion1.1.22/version/dependency!-- 多数据源的分布式事务控制--dependencygroupIdorg.springframework.boot/groupIdartifactIdspring-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=truecharacterEncoding=utf-8allowMultiQueries=trueuseSSL=falsezeroDateTimeBehavior=convertToNullserverTimezone=Asia/ShanghaiautoReconnect=trueusername:rootpassword:rootdriver-class-name:com.mysql.cj.jdbc.Driverslave:url:jdbc:mysql://localhost:3307/remote_test?useUnicode=truecharacterEncoding=utf-8allowMultiQueries=trueuseSSL=falsezeroDateTimeBehavior=convertToNullserverTimezone=Asia/ShanghaiautoReconnect=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;
151、从理论到实战:SwinIR在单图像超分中的注意力机制深度解析与代码复现 151、从理论到实战:SwinIR在单图像超分中的注意力机制深度解析与代码复现 上周调SwinIR的时候,一个batch的PSNR死活卡在32.5上不去,我盯着tensorboard的曲线看了半小时,最后发现是窗口划分时padding没对齐——这种坑,论文里不会写,但跑代码的人迟早会撞上。今天这篇笔记,… 2026/7/15 16:08:21
智慧边检站四维数字孪生智能防控 智慧边检站四维数字孪生智能防控 一、项目概述 针对传统边检站存在建筑遮挡盲区多、室内外态势割裂、模型静态滞后、监控二维碎片化、人员行为研判弱、人工值守压力大、取证追溯困难等痛点,本项目依托全自研国产化数字孪生底座,不新增激光雷达、传感… 2026/7/15 16:06:20
CANN/hcomm HCCL可视化分析指南 HVRM Insight User Guide 【免费下载链接】hcomm HCOMM(Huawei Communication)是HCCL的通信基础库,提供通信域以及通信资源的管理能力。 项目地址: https://gitcode.com/cann/hcomm 1. Overview HVRM Insight is a distributed opera… 2026/7/15 16:06:19
宽压输入6A电源模块设计与工业应用解析 1. 4.5~28VIN至2.5VOUT/6A电源模块的核心特性解析这个电源模块最吸引人的地方在于它同时实现了宽输入电压范围(4.5~28V)和大电流输出(6A)的能力,这在工业应用中非常实用。我拆解过不少类似模块,发现要实现这… 2026/7/15 18:08:05
C++ RPC框架发布端核心原理与实现:从网络通信到服务治理 1. 项目概述与核心价值最近在搞分布式系统,发现很多朋友对RPC框架的实现,特别是服务发布端这块,感觉有点“黑盒”。网上的资料要么太理论,要么就是直接上重量级框架的源码,看得人头大。正好手头有个用C从零搭建的轻量级… 2026/7/15 18:06:05
新手小白从零开始彻底把握泛程序建立 在当今数字化年代,泛程序建立才能愈发重要,关于新手小白而言,从零开始把握这门技能并非遥不行及,只需遵从科学的学习途径并锲而不舍,就能逐步把握。首要,要建立厚实的根底。泛程序涉及到多种技能࿰… 2026/7/15 18:06:05
安卓虚拟相机技术解析:从系统级Hook到视频流重定向 安卓虚拟相机技术解析:从系统级Hook到视频流重定向 【免费下载链接】com.example.vcam 虚拟摄像头 virtual camera 项目地址: https://gitcode.com/gh_mirrors/co/com.example.vcam 安卓虚拟相机(android_virtual_cam)是一款基于Xpose… 2026/7/15 18:06:05
从四大强度理论到工程实践:有限元分析中的材料失效判据选择 1. 强度理论的基础概念与实际意义 第一次接触有限元分析报告时,看到满屏的应力云图和密密麻麻的数据表格,很多工程师都会感到困惑:究竟该关注哪个应力指标?为什么同样的工况,铸铁零件和钢制零件要选用不同的评判标准&a… 2026/7/15 18:04:04
Minecraft 1.21 MASA模组汉化终极指南:7步实现专业级中文界面 Minecraft 1.21 MASA模组汉化终极指南:7步实现专业级中文界面 【免费下载链接】masa-mods-chinese 一个masa mods的汉化资源包 项目地址: https://gitcode.com/gh_mirrors/ma/masa-mods-chinese MASA模组汉化资源包(masa-mods-chinese)… 2026/7/15 18:04:04
行星减速机的工作原理是什么?从齿轮运动关系到减速比计算 一、行星齿轮机构的组成 标准行星齿轮机构主要包括: 太阳轮; 行星轮; 内齿圈; 行星架。 太阳轮位于机构中心。 多个行星轮围绕太阳轮均匀布置,行星轮内侧与太阳轮外啮合,外侧与内齿圈内啮合。 行星轮通过轴… 2026/7/15 0:03:00
阅读Java开源框架源码的心得分享! 前几日闲来无事有幸看到了一位博主分享自己阅读开源框架源码的心得,看了之后也引发了我的一些深度思考。我们为什么要看源码?我们该怎么样去看源码? 其中前者那位博主描述的我觉得很全了(如下图所示),就不做… 2026/7/15 0:03:00
【LINUX】驱动 【LINUX驱动】【字符设备】【中断】【Platform】【网课 设备树】【GPIO】【PINCTRL】【INPUT】【IIC】【SPI】【网络驱动】【屏幕驱动】【一 设备树】【二 内核模块编译】【三 基本驱动框架】【四 Platform总线设备驱动框架】【五 驱动子系统】【六 综合】 2026/7/15 0:07:01
Git reset 与 revert 深度对比:5个关键差异与 3 种典型应用场景 Git Reset 与 Revert 深度对比:5个关键差异与3种典型应用场景在团队协作开发中,代码版本管理如同行走钢丝——一步失误可能导致整个项目陷入混乱。作为Git进阶用户,你是否曾在深夜面对错误的提交束手无策?是否在强制推送后收到同事… 2026/7/13 8:31:55
GitHub 学生包申请避坑:5个常见失败原因与开发者工具调试方案 GitHub 学生包申请技术排障指南:5个高频失败场景与开发者工具实战方案第一次尝试申请GitHub学生包时,我盯着屏幕上那个不断转圈的加载动画整整15分钟,最终只等来了一行冰冷的错误提示。这可能是许多开发者共同的经历——明明按照教程操作&… 2026/7/14 18:25:04
冒烟测试用例设计规范:5%-10%覆盖率下的3类核心场景与执行标准 冒烟测试用例设计的黄金法则:5%-10%覆盖率下的精准筛选策略在快节奏的敏捷开发环境中,冒烟测试作为质量保障的第一道防线,其重要性不言而喻。当测试资源有限而时间紧迫时,如何从海量测试用例中精准筛选出那关键的5%-10%࿰… 2026/7/14 5:09:41