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

mybatisPlus多数据源方案

背景

在微服务李娜一般一个服务只有一个数据源,但是在有的老项目或者一些特定场景需要多数据源链接不同的数据库,本文以mybatisPlus为基础给出解决方案

多数据源场景分类

  • 情形一:项目启动就确定了
  • 情形一:一些sass系统里面动态确定的,比如说运行时建立的数据源,还有一些报表场景也是如此 本文暂不讨论相关

解决方案(本人都有使用过):

1.mybatisPlus官网提供的 提供框架,使用是使用注解切换 缺点很大,不建议

2.使用sharding等分库分表工具,这个是可以用来当做多数据源的解决方案的

3.分包 本文使用次方案

项目环境

springboot3.x mybatisPlus3.5.3(低于该版本会有问题,因为spring有的类被删除了会报错)

讲道理23年使用springboot3.x不应该使用mybatis的,mybatis目前还不支持native编译,但是本文属于后端项目,不适用native也无所谓

配置文件

master配置

@Configuration
@MapperScan(basePackages = "com.git.mapper.mysql", sqlSessionTemplateRef = "masterSqlSessionTemplate")
public class MasterDataSourceConfig {@Bean(name = "masterDataSource")@ConfigurationProperties(prefix = "spring.datasource.hikari.master")public DataSource masterDataSource() {return DataSourceBuilder.create().build();}@Bean(name = "masterSqlSessionFactory")@Primarypublic SqlSessionFactory masterSqlSessionFactory(@Qualifier("masterDataSource") DataSource dataSource) throws Exception {MybatisSqlSessionFactoryBean sessionFactoryBean = new MybatisSqlSessionFactoryBean();//MybatisSqlSessionFactoryBean这个要换成mybatisPlus的,不然没有一些通用sql的功能sessionFactoryBean.setDataSource(dataSource);sessionFactoryBean.setGlobalConfig(masterGlobalConfig());sessionFactoryBean.setPlugins(masterPlusInterceptor());sessionFactoryBean.setVfs(SpringBootVFS.class);//还能设置xml扫描路径,别名配置等,本文比较野直接注解return sessionFactoryBean.getObject();}@Bean("masterTransactionManager")@Primary// 数据源事务管理器public DataSourceTransactionManager masterTransactionManager(@Qualifier("masterDataSource") DataSource dataSource) {return new DataSourceTransactionManager(dataSource);}@Bean(name = "masterSqlSessionTemplate")@Primarypublic SqlSessionTemplate masterSqlSessionTemplate(@Qualifier("masterSqlSessionFactory") SqlSessionFactory sqlSessionFactory) {return new SqlSessionTemplate(sqlSessionFactory);}@Bean("masterGlobalConfig")public GlobalConfig masterGlobalConfig() {GlobalConfig globalConfig = new GlobalConfig();return globalConfig;}/*** 分页插件*/@Bean("masterPlusInterceptor")public MybatisPlusInterceptor masterPlusInterceptor() {MybatisPlusInterceptor interceptor = new MybatisPlusInterceptor();interceptor.addInnerInterceptor(new PaginationInnerInterceptor(DbType.MYSQL));return interceptor;}}

slave配置

@Configuration
@MapperScan(basePackages = "com.git.mapper.sqlserver", sqlSessionTemplateRef = "slaveSqlSessionTemplate")
public class SlaveDataSourceConfig {@Bean(name = "slaveDataSource")@ConfigurationProperties(prefix = "spring.datasource.hikari.slave")public DataSource slaveDataSource() {return DataSourceBuilder.create().build();}@Bean(name = "slaveSqlSessionFactory")public SqlSessionFactory slaveSqlSessionFactory(@Qualifier("slaveDataSource") DataSource dataSource) throws Exception {MybatisSqlSessionFactoryBean sessionFactoryBean = new MybatisSqlSessionFactoryBean();sessionFactoryBean.setDataSource(dataSource);sessionFactoryBean.setGlobalConfig(slaveGlobalConfig());sessionFactoryBean.setPlugins(slavePlusInterceptor());sessionFactoryBean.setVfs(SpringBootVFS.class);return sessionFactoryBean.getObject();}@Bean("slaveTransactionManager")// 数据源事务管理器public DataSourceTransactionManager slaveTransactionManager(@Qualifier("slaveDataSource") DataSource dataSource) {return new DataSourceTransactionManager(dataSource);}@Bean(name = "slaveSqlSessionTemplate")public SqlSessionTemplate slaveSqlSessionTemplate(@Qualifier("slaveSqlSessionFactory") SqlSessionFactory sqlSessionFactory) {return new SqlSessionTemplate(sqlSessionFactory);}@Bean("slaveGlobalConfig")public GlobalConfig slaveGlobalConfig() {GlobalConfig globalConfig = new GlobalConfig();return globalConfig;}/*** 分页插件*/@Bean("slavePlusInterceptor")public MybatisPlusInterceptor slavePlusInterceptor() {MybatisPlusInterceptor interceptor = new MybatisPlusInterceptor();interceptor.addInnerInterceptor(new PaginationInnerInterceptor(DbType.SQL_SERVER));return interceptor;}
}

mapper包配置

使用与普通的mybatisPlus一样

在这里插入图片描述

注意事项

手动配置多数据源不会配置何解?

直接看mybatisPlus的自动配置

com.baomidou.mybatisplus.autoconfigure.MybatisPlusAutoConfiguration#sqlSessionFactory

关联文章:

spring如何管理mybatis的事务

mybatis源码考究二(sqlsession线程安全和缓存失效)

本文为原创,转载请申明

相关文章:

mybatisPlus多数据源方案

背景 在微服务李娜一般一个服务只有一个数据源,但是在有的老项目或者一些特定场景需要多数据源链接不同的数据库,本文以mybatisPlus为基础给出解决方案 多数据源场景分类 情形一:项目启动就确定了情形一:一些sass系统里面动态确…...

MonoDETR: Depth-guided Transformer for Monocular 3D Object Detection 论文解读

MonoDETR论文解读 abstract 单目目标检测在自动驾驶领域,一直是一个具有挑战的任务。现在大部分的方式都是沿用基于卷积的2D 检测器,首先检测物体中心,后通过中心附近的特征去预测3D属性。 但是仅仅通过局部的特征去预测3D特征是不高效的&…...

Vulnhub内网渗透DC-7靶场通关

个人博客: xzajyjs.cn DC系列共9个靶场,本次来试玩一下一个 DC-7,下载地址。 下载下来后是 .ova 格式,建议使用vitualbox进行搭建,vmware可能存在兼容性问题。靶场推荐使用NAT(共享)模式,桥接模式可能会造成目标过多不…...

acunetix2023安装教程

1、解压之后一键安装exe文件 2、将解压出来的Awv2023.6[Windows]文件夹下的wvsc.exe文件放置于AWVS安装目录,与原文件进行替换,如图所示。(注:如果是默认安装,则文件位置位于C:\Program Files (x86)\Acunetix\14.2.210…...

pytest pytest.ini 配置日志输出至文件

创建pytest.ini 文件 [pytest] log_file pytest_log.txt log_file_level INFO log_file_date_format %Y-%m-%d %H:%M:%S log_file_format %(asctime)s | %(filename)s | %(funcName)s | line:%(lineno)d | %(levelname)s | %(message)s import pytest import loggingdef …...

Linux脚本-将当前文件夹下所有包含main函数的.c文件提取出来

实现一个Linux脚本,该脚本使用 for 循环遍历当前目录下的所有 .c 文件。 对于每个 .c 文件,使用 grep 命令来查找是否包含字符串 “main”。 如果该 .c 文件包含 “main”,则输出到/home/majn/llvm_project/extract_main目录下。 #!/bin/bas…...

Spring依赖注入(DI)

目录 构造器注入 set注入 拓展注入 bean的作用域 Singleton Prototype Dependency Injection 依赖 : 指Bean对象的创建依赖于容器 . Bean对象的依赖资源 . 注入 : 指Bean对象所依赖的资源 , 由容器来设置和装配 . 构造器注入 具体实现:SpringIOC创建对象的…...

论文笔记: 深度学习速度模型构建的层次迁移学习方法 (未完)

摘要: 分享对论文的理解, 原文见 Jrome Simon, Gabriel Fabien-Ouellet, Erwan Gloaguen, and Ishan Khurjekar, Hierarchical transfer learning for deep learning velocity model building, Geophysics, 2003, R79–R93. 这次的层次迁移应该指从 1D 到 2D 再到 3D. 摘要 深…...

苹果为 Vision Pro 头显申请游戏手柄专利

苹果Vision Pro 推出后,美国专利局公布了两项苹果公司申请的游戏手柄专利,其中一项的专利图如下图所示。据 PatentlyApple 报道,虽然申请专利并不能保证苹果公司会推出游戏手柄,但是苹果公司同时也为游戏手柄申请了商标&#xff0…...

【数据结构】多叉树转换为二叉树-c++代码实现-POJ 3437 Tree Grafting

文章目录 写这个题目的原因寻找提交网址题目解决思路AC代码成功AC 写这个题目的原因 1、今天在看王道考研数据结构的课(虽然我要保研,但是因为这些看保研面试的时候会问,所以看一下嘞orz),看到了这个多叉树转换为二叉…...

ASP.NET Core 中基于 Controller 的 Web API

基于 Controller 的 Web API ASP.NET Wep API 的请求架构 客户端发送Http请求,Contoller响应请求,并从数据库读取数据,序列化数据,然后通过 Http Response返回序列化的数据。 ControllerBase 类 Web API 的所有controllers 一般…...

iOS系统修复软件 Fix My iPhone for Mac

Fix My iPhone for Mac是一款iOS系统恢复工具。修复您的iPhone卡在Apple徽标,黑屏,冻结屏幕,iTunes更新/还原错误和超过20个iOS 12升级失败。这个macOS桌面应用程序提供快速,即时的解决方案来修复您的iOS系统问题,而不…...

Git企业开发控制理论和实操-从入门到深入(七)|企业级开发模型

前言 那么这里博主先安利一些干货满满的专栏了! 首先是博主的高质量博客的汇总,这个专栏里面的博客,都是博主最最用心写的一部分,干货满满,希望对大家有帮助。 高质量博客汇总 然后就是博主最近最花时间的一个专栏…...

15. 卡牌游戏

目录 题目 思路 C整体代码(含详细注释) 题目 Description 小张在玩一种卡牌游戏,牌组由张牌组成,其中张上写有数字各一张,其余张上全部是数字。 现在牌组经过随机打乱后,小张拿走其中张牌作为手牌&#…...

vue使用打印组件print-js

项目场景&#xff1a; 由于甲方要求&#xff0c;项目需要打印二维码标签&#xff0c;故开发此功能 开发流程 安装包&#xff1a;npm install print-js --saveprint-js的使用 <template><div id"print" ref"print" ><p>打印内容<p&…...

20230830比赛总结

分数 预估分数&#xff1a; 100 100 [ 0 , 20 ] 100 [ 300 , 320 ] 100100[0,20]100[300,320] 100100[0,20]100[300,320] 实际分数&#xff1a; 100 100 10 100 310 10010010100310 10010010100310 反思 B 只是粗略观察表就急于写决策单调性优化&#xff0c;写完后…...

DNS指向别名还是IP

现在有一台服务器dbprod126&#xff0c;ip是172.22.100.4 现在有一个需求&#xff0c;需要在dns中对dbprod126建一个别名wondadb3r的记录&#xff0c;也就是ping wondadb3r的时候显示的是dbprod126的ip&#xff0c;目前有两​种方法&#xff0c;主要使用方法1指向别名&#xf…...

【考研数学】概率论与数理统计 —— 第二章 | 一维随机变量及其分布(1,基本概念与随机变量常见类型)

文章目录 引言一、一维随机变量及其分布1.1 随机变量1.2 分布函数 二、随机变量常见类型及分布2.1 离散型随机变量2.2 连续型随机变量及概率密度函数 写在最后 引言 暑假接近尾声了&#xff0c;争取赶一点概率论部分的进度。 一、一维随机变量及其分布 1.1 随机变量 设随机试…...

CSS判断手机暗黑模式

手机有个功能到了晚上会自动变成深色也就是暗黑模式.这种情况下网页会自动变颜色.如果想自由控制暗黑模式下的html样式的话,可以用如下方式: media (prefers-color-scheme: dark) {/*html, body {*//*filter: invert(1) hue-rotate(180deg);*//*}*/.maill{margin-left: 0;marg…...

【java中的Set集合】HashSet、LinkedHashSet、TreeSet(最通俗易懂版!!)

目录 一、HashSet集合 1.HashSet集合的特点 2.HashSet常用方法 二、LinkedHashSet集合 LinkedHashSet集合的特点 三、TreeSet集合 1.TreeSet集合的特点 2.TreeSet的基本使用 四、HashSet、LinkedHashSet、TreeSet的使用场景 五、list和set集合的区别 一、HashSet集合 …...

杨立昆新模型杀疯了,1500万参数单GPU就能碾压大厂?

就在前几天&#xff0c;AI教父、图灵奖得主杨立昆刚发了个新模型&#xff0c;名叫LeWorldModel&#xff0c;论文一发出&#xff0c;整个圈子瞬间炸锅。说出来你们可能都不信——这货只有1500万参数&#xff0c;单块GPU几个小时就能训完&#xff0c;随便一个研究者都拉起来跑一遍…...

EasyAnimateV5-7b-zh-InP在AI艺术创作中的算法优化实践

EasyAnimateV5-7b-zh-InP在AI艺术创作中的算法优化实践 1. 引言 作为一名数字艺术创作者&#xff0c;我一直在寻找能够提升创作效率和质量的技术工具。最近在尝试使用EasyAnimateV5-7b-zh-InP进行艺术创作时&#xff0c;发现这个模型在图像到视频的转换方面表现出色&#xff…...

当00后测试员给CEO系统提了487个缺陷后

在软件测试领域&#xff0c;一个年轻测试员的行动往往能引发行业深思。故事始于一家科技公司新上线的“CEO决策支持系统”——一个旨在为高管提供实时数据分析和战略建议的核心平台。项目团队信心满满地推进上线&#xff0c;却未料到一位00后测试员小陈的介入&#xff0c;彻底改…...

XiaoMusic:让小爱音箱突破音乐限制的开源解决方案

XiaoMusic&#xff1a;让小爱音箱突破音乐限制的开源解决方案 【免费下载链接】xiaomusic 使用小爱音箱播放音乐&#xff0c;音乐使用 yt-dlp 下载。 项目地址: https://gitcode.com/GitHub_Trending/xia/xiaomusic 你是否遇到过这样的困扰&#xff1a;想听的歌曲在各大…...

告别NMS!用RT-DETR在1080Ti上跑出108FPS的实时目标检测(保姆级部署教程)

在1080Ti上实现108FPS的RT-DETR实时目标检测实战指南 当目标检测遇上Transformer架构&#xff0c;一场关于速度与精度的革命正在悄然发生。RT-DETR作为DETR家族的最新成员&#xff0c;不仅继承了端到端集合预测的基因&#xff0c;更通过一系列创新设计突破了实时检测的瓶颈。本…...

基因组变异致病性预测:从SIFT、PolyPhen到PrimateAI的算法演进

点击 “AladdinEdu&#xff0c;你的AI学习实践工作坊”&#xff0c;注册即送-H卡级别算力&#xff0c;沉浸式云原生集成开发环境&#xff0c;80G大显存多卡并行&#xff0c;按量弹性计费&#xff0c;教育用户更享超低价。 摘要&#xff1a;基因组变异致病性预测是精准医学的关键…...

VS2022 + WinForms:从拖控件到写逻辑,手把手带你做出第一个C#计算器

VS2022 WinForms&#xff1a;从拖控件到写逻辑&#xff0c;手把手带你做出第一个C#计算器 第一次打开Visual Studio 2022时&#xff0c;那个闪亮的启动界面可能会让你既兴奋又不知所措。作为微软最新的集成开发环境&#xff0c;VS2022为C#开发者提供了强大的工具链&#xff0…...

G-Helper解决华硕笔记本续航衰减的智能调控方案:延长50%使用时间

G-Helper解决华硕笔记本续航衰减的智能调控方案&#xff1a;延长50%使用时间 【免费下载链接】g-helper Lightweight, open-source control tool for ASUS laptops and ROG Ally. Manage performance modes, fans, GPU, battery, and RGB lighting across Zephyrus, Flow, TUF,…...

终极Enformer基因表达预测指南:如何在10分钟内快速部署深度学习模型

终极Enformer基因表达预测指南&#xff1a;如何在10分钟内快速部署深度学习模型 【免费下载链接】enformer-pytorch Implementation of Enformer, Deepminds attention network for predicting gene expression, in Pytorch 项目地址: https://gitcode.com/gh_mirrors/en/enf…...

17种智能体(Agent)架构全景解析:演进逻辑、工程价值与落地实践

17种智能体&#xff08;Agent&#xff09;架构按“单体→增强→工具→多智能体→操作系统级”的演进路径&#xff0c;分为5大类&#xff0c;核心逻辑是从简单到复杂、从基础到前沿&#xff0c;兼顾工程落地性和理论完整性。以下将对每一种架构模式进行详细拆解&#xff0c;结合…...