首页 > 其他分享 >Mybatis整合多数据源

Mybatis整合多数据源

时间:2024-07-23 16:29:59浏览次数:14  
标签:slave 数据源 dynamic master datasource 整合 spring Mybatis

背景

 

有时候我们需要查询来自多个库表的数据内容,但是又不想起多个服务,可以业务需要这些数据那该怎么办呢?那么其实Mybatis 是支持整合多数据源,并随时进行切换。

 

解决

引入依赖

 

首先引入dynamic-datasource-spring-boot-starter依赖

<dependency>
  <groupId>com.baomidou</groupId>
  <artifactId>dynamic-datasource-spring-boot-starter</artifactId>
  <version>${version}</version><!--版本号-->
</dependency>

 

配置文件

 

mybatis-plus:
  configuration:
    log-impl: org.apache.ibatis.logging.stdout.StdOutImpl
    map-underscore-to-camel-case: true
  mapper-locations: mapper/*.xml

server:
  port: 8989

spring:
  datasource:
    dynamic:
      primary: master
      strict: false
      datasource:
        master:
          url: jdbc:mysql://localhost:3306/yuapi?serverTimezone=Asia/Shanghai&useUnicode=true&characterEncoding=utf-8&useSSL=false
          username: root
          password: root
          driver-class-name: com.mysql.cj.jdbc.Driver
        slave_1:
          url: jdbc:mysql://localhost:3306/db_email?serverTimezone=Asia/Shanghai&useUnicode=true&characterEncoding=utf-8&useSSL=false
          username: root
          password: root
          driver-class-name: com.mysql.cj.jdbc.Driver

配置方式

# 多主多从                      纯粹多库(记得设置primary)                   混合配置
spring:                               spring:                               spring:
  datasource:                           datasource:                           datasource:
    dynamic:                              dynamic:                              dynamic:
      datasource:                           datasource:                           datasource:
        master_1:                             mysql:                                master:
        master_2:                             oracle:                               slave_1:
        slave_1:                              sqlserver:                            slave_2:
        slave_2:                              postgresql:                           oracle_1:
        slave_3:                              h2:                                   oracle_2:

 

通过注解切换数据源

 

可以通过@DS注解进行数据源切换

@Service
@DS("master")
public class InterfaceInfoServiceImpl extends ServiceImpl<InterfaceInfoMapper, InterfaceInfo> implements InterfaceInfoService {
}
@Service
@DS("slave_1")
public class TEmailServiceImpl extends ServiceImpl<TEmailMapper, TEmail> implements TEmailService {
}

注解的内容对应配置里的名称。

 

约定

  1. 本框架只做 切换数据源 这件核心的事情,并不限制你的具体操作,切换了数据源可以做任何CRUD。
  2. 配置文件所有以下划线 _ 分割的数据源 首部 即为组的名称,相同组名称的数据源会放在一个组下。
  3. 切换数据源可以是组名,也可以是具体数据源名称。组名则切换时采用负载均衡算法切换。
  4. 默认的数据源名称为 master ,你可以通过 spring.datasource.dynamic.primary 修改。
  5. 方法上的注解优先于类上注解。
  6. DS支持继承抽象类上的DS,暂不支持继承接口上的DS,在方法上面标记优先级高于在类上标记。

注意这个原理也是基于AOP,所以在一个方法内是不可以切换数据源的。

标签:slave,数据源,dynamic,master,datasource,整合,spring,Mybatis
From: https://www.cnblogs.com/qimoxuan/p/18318796

相关文章

  • 智能停车场系统--前后端分离(可直接落地)使用数据:vue,springBoot,redis,mybatis,mysql等
    系统首页-统计停车车收费收费数据展示实现代码:对菜单控制代码@AutowiredprivateMenuServicemenuService;@AutowiredprivateRoleMenuServiceroleMenuService;@GetMapping("/list")publicResultlist(){List<MenuRoleVO>menuRoleList=this.menuServi......
  • mybatis-plus对表的查询方式
    publicPage<WmsInventoryVO>queryPage(WmsInventoryQueryquery,Pageablepage){List<WmsInventory>list=selectList(query,page);List<WmsInventoryVO>res=inventoryConvert.dos2vos(list);injectAreaAndItemInfo(r......
  • 学习笔记-MyBatis 的使用
    目录为什么要用MyBatis?传统的JDBC七个步骤优化JDBC操作优化空间什么是MyBatis?使用MyBatis1.引入第三方依赖2.修改配置3.创建Mapper层(Dao层)4.写SQL映射文件测试注册Mapper层映射文件设置带参方法优化MyBatis操作过程Service业务层Controlle......
  • Python学习-九大数据类型整合,详细讲解
    目录1.int(整型)2.float(浮点型)3.Bool(布尔类型)4.Str(字符串类型)5.None(空值)6.List(列表)7.Tuple(元组)8.Dict(字典)9.Set(集合)(字典,列表,元组,字符串知识点可能不全,可以参考本人之前发的博客进行学习,加油。)1.int(整型)特点和用途:1.可以表示正整数、负整数......
  • mybatis使用foreach批量插入
    创建表createtablepublic."match"(match_datedatenotnull,match_namecharactervarying(20)notnull,match_seasoncharactervarying(10)notnull,match_roundnumeric(2)notnull,home_teamcharactervarying(30)notnull,away_teamcharact......
  • SpringBoot利用MyBatis连接Mysql数据库时常见启动报错
    目录报错情况报错情况一:​编辑报错情况二:解决步骤一、解决命名问题1.mapper层的id是否和Dao层的方法名字相同2.检查namespace与Dao层的文件地址相同二、解决注解问题1.检查Controller层的注解是否正确和完整2.Dao层或者Mapper层的注解3.pojo层:实体类层Data注解(用来......
  • JavaWeb MyBatis案例
    JAVAWEBMyBatis视频学习笔记MyBatis案例1环境准备1.1数据库准备1.2准备一个Brand实体类1.3准备测试用例1.4安装MyBatisX插件2编写接口2.1编写查询所有2.1.1编写Mapper接口2.1.2编写SQL映射文件2.1.3编写测试语句完成测试2.1.4BugFix2.2查看详情2.2.1编......
  • 项目方案:社会视频资源整合接入汇聚系统解决方案(十)-视频监控汇聚应用案例和解决方案
    目录一、概述  1.1应用背景1.2总体目标1.3设计原则1.4设计依据1.5术语解释二、需求分析2.1政策分析2.2业务分析2.3系统需求三、系统总体设计3.1设计思路3.2总体架构3.3联网技术要求四、视频整合及汇聚接入4.1设计概述4.2社会视频资源分类4.3网络......
  • linux 第一周重点整合 (续)
    压缩指令:gzip说明:linux压缩文件为.gz(gzip)格式语法:gzip[选项]文件名选项:-r:可以将目录下的文件递归压缩-l:显示已经压缩文件的压缩信息-d:解压缩eg:gzipaa.c压缩aa.c文件gzip-daa.c.gz解压aa.c.gzgzip-ra递归压缩a文件夹,将a文件夹中的所有文件进行压缩,文件......
  • 如何使用FlowUs快速构建专业领域知识网络是一个系统化的过程,旨在整合和组织一个特定领
     在这个信息爆炸的时代,快速构建知识网络就像是在浩瀚的知识海洋中搭建一座灯塔,指引我们前行的方向。它不仅帮助我们系统化地整理和理解复杂的信息,还能让我们在专业领域内更快速地成长和进步。当你面对一个全新的项目或挑战时,拥有一个完善的知识网络就像是拥有了一个强大的后......