当前位置: 首页 > 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集合 …...

【Perplexity诗词歌赋搜索黑科技】:20年NLP专家首度公开5大语义对齐技巧,让古诗检索准确率飙升至98.7%

更多请点击&#xff1a; https://kaifayun.com 第一章&#xff1a;Perplexity诗词歌赋搜索黑科技全景透视 Perplexity 并非专为古籍设计的搜索引擎&#xff0c;但其基于大语言模型的实时语义理解与多源交叉验证机制&#xff0c;意外地在诗词歌赋领域展现出颠覆性能力——它不依…...

如何快速搭建微信智能机器人:7步实现多AI服务自动回复

如何快速搭建微信智能机器人&#xff1a;7步实现多AI服务自动回复 【免费下载链接】wechat-bot &#x1f916;一个基于 WeChaty 结合 ChatGPT / Claude / Kimi / DeepSeek / Ollama等Ai服务实现的微信机器人 &#xff0c;可以用来帮助你自动回复微信消息&#xff0c;或者社群分…...

测试TVS:SP0503BAHTG

简 介&#xff1a; 本文测试了SP0503BAHTG三通道TVS二极管阵列的特性。通过设计测试电路板&#xff0c;测量了该器件对1kHz正弦波的限幅效果&#xff0c;测得反向导通电压约-0.8V&#xff0c;顶部饱和电压6.3V。在1MHz高频测试中观察到快速响应特性&#xff0c;通过矩形波上升沿…...

2026 国内大厂 Java 最全面试真题(含场景方案+数据库+分布式必问)

开源一套金三银四自刷的面试题库&#xff0c;自己感觉还不错&#xff0c;也拿了几个 Offer&#xff08;三个大厂的&#xff0c;字节、蚂蚁、滴滴&#xff09;&#xff01;下面直接上干货哈&#xff01;需要获取得话可以在文末免费领取JVM 篇&#xff08;87 道&#xff09;JVM 篇…...

Play Integrity API Checker:如何快速检测Android设备完整性的专业指南

Play Integrity API Checker&#xff1a;如何快速检测Android设备完整性的专业指南 【免费下载链接】play-integrity-checker-app Get info about your Device Integrity through the Play Intergrity API 项目地址: https://gitcode.com/gh_mirrors/pl/play-integrity-check…...

ATmega328P烧录Bootloader报错?别急着换芯片,可能是签名搞的鬼(附avrdude.conf修改教程)

ATmega328P烧录Bootloader报错&#xff1f;别急着换芯片&#xff0c;可能是签名搞的鬼&#xff08;附avrdude.conf修改教程&#xff09; 当你兴致勃勃地准备给新买的ATmega328P芯片烧录Bootloader时&#xff0c;突然弹出一串红色报错信息&#xff0c;那种心情就像煮熟的鸭子飞走…...

Faster-Whisper 实战:从本地部署到WebSocket实时语音转写服务

1. Faster-Whisper本地环境搭建 第一次接触Faster-Whisper时&#xff0c;我被它的速度惊艳到了。相比原版Whisper&#xff0c;这个优化版本在保持相同准确率的情况下&#xff0c;推理速度提升了4倍以上。这对于需要实时语音转写的场景来说简直是福音。下面我会手把手带你完成环…...

COLMAP稠密点云太稀疏?OpenMVS点云又太密?试试这个‘黄金搭档’配置方案

COLMAP与OpenMVS混合重建&#xff1a;如何实现点云密度与计算效率的黄金平衡 在三维重建领域&#xff0c;我们常常面临一个两难选择&#xff1a;COLMAP生成的稠密点云往往过于稀疏&#xff0c;导致最终网格模型细节不足&#xff1b;而OpenMVS自带的稠密重建又容易产生过度密集的…...

IPXWrapper终极指南:让90年代经典游戏在现代Windows上重生联机对战

IPXWrapper终极指南&#xff1a;让90年代经典游戏在现代Windows上重生联机对战 【免费下载链接】ipxwrapper 项目地址: https://gitcode.com/gh_mirrors/ip/ipxwrapper 对于许多怀旧游戏玩家来说&#xff0c;最大的遗憾莫过于那些经典的《星际争霸》、《帝国时代》、《…...

ROS Melodic下用Mapviz+天地图API显示GPS轨迹(保姆级避坑指南)

ROS Melodic下Mapviz与天地图API的高精度GPS轨迹可视化实战 在机器人定位与导航开发中&#xff0c;将GPS轨迹叠加到卫星地图上是验证算法效果的基础需求。对于国内开发者而言&#xff0c;直接使用Google Maps等国际服务常面临访问限制和偏移问题。本文将深入讲解如何在ROS Mel…...