SpringBoot【十一】mybatis-plus实现多数据源配置,开箱即用!

一、前言??

环境说明:Windows10 + Idea2021.3.2 + Jdk1.8 + SpringBoot 2.3.1.RELEASE
正常情况下我们在开发系统的时候都是使用一个数据源,但是由于有些项目同步数据的时候不想造成数据库io消耗压力过大,便会一个项目对应多个数据源,即就会有个问题,Springboot配置db都是默认加载数据源连接,连接池默认配置,但是配置多个数据库url,这该怎么实现呢?
不用担心,我们就是为了解决而写的,不用复杂的实现方式,什么Springboot+mybatis在配置文件中配置多个数据源,然后mapper指定连接配置等,不,不需要,我嫌太麻烦了,今天我就要给你们安利它:**dynamic-datasource-spring-boot-starter,一个基于springboot的快速集成多数据源的启动器,开箱即用,超级方便。**接下来我就为大家一一讲解,虽然配置很简单,但是坑也比较多,bug菌都为大家给淌过啦,你们就直接直接拿去用即可!

二、dynamic-datasource-spring-boot-starter

一、简介

dynamic-datasource-spring-boot-starter 是一个基于springboot的快速集成多数据源的启动器。

其支持 Jdk 1.7+, SpringBoot 1.4.x 1.5.x 2.x.x

二、特性
  • 支持 数据源分组 ,适用于多种场景 纯粹多库 读写分离 一主多从 混合模式。
  • 支持数据库敏感配置信息 加密 ENC()。
  • 支持每个数据库独立初始化表结构schema和数据库database。
  • 支持无数据源启动,支持懒加载数据源(需要的时候再创建连接)。
  • 支持 自定义注解 ,需继承DS(3.2.0+)。
  • 提供并简化对Druid,HikariCp,BeeCp,Dbcp2的快速集成。
  • 提供对Mybatis-Plus,Quartz,ShardingJdbc,P6sy,Jndi等组件的集成方案。
  • 提供 自定义数据源来源 方案(如全从数据库加载)。
  • 提供项目启动后 动态增加移除数据源 方案。
  • 提供Mybatis环境下的 纯读写分离 方案。
  • 提供使用 spel动态参数 解析数据源方案。内置spel,session,header,支持自定义。
  • 支持 多层数据源嵌套切换 。(ServiceA >>> ServiceB >>> ServiceC)。
  • 提供 **基于seata的分布式事务方案。
  • 提供 本地多数据源事务方案。
三、使用方法

1、老规矩,先引依赖包。引入dynamic-datasource-spring-boot-starter;

复制代码
<!--配置多数据源-->
<dependency>
    <groupId>com.baomidou</groupId>
    <artifactId>dynamic-datasource-spring-boot-starter</artifactId>
    <version>3.5.0</version>
</dependency>

2、配置数据源。

复制代码
spring:
  datasource:
    dynamic:
      primary: master #设置默认的数据源或者数据源组,默认值即为master
      strict: false #严格匹配数据源,默认false. true未匹配到指定数据源时抛异常,false使用默认数据源
      datasource:
        master:
          driver-class-name: com.mysql.cj.jdbc.Driver   #3.2.0开始支持SPI可省略此配置
          url: jdbc:mysql://localhost:3306/springboot_db?serverTimezone=GMT%2B8&useUnicode=true&characterEncoding=utf-8
          username: root
          password: 123456
        slave_1:
          driver-class-name: com.mysql.cj.jdbc.Driver   #3.2.0开始支持SPI可省略此配置
          url: jdbc:mysql://127.0.0.1:3306/test_db2?setUnicode=true&characterEncoding=utf8
          username: root
          password: 123456

拓展:同时也支持多主多从,多种不同库及混合配置。

3、实战演示:

我们先来指定配置环境:

配置好配置环境后,先启动下项目,查看库是否都正常连接。如下控制台启动打印的日志,表示两库都正常连接。

接着,我们先创建两个实体,分别对应db1和db2的user表:

接着写一个controller类;

接着接口实现层:

这里我就为大家讲解一下了。

数据源切换,使用的是提供的**@DS**注解。

其中@DS 可以注解在方法上或类上,同时存在就近原则 方法上注解 优先于 类上注解。(所以你们看上边,注解在类上使用的是主库,但是基于下边某个方法就是制定了从库,但是我这样放一起是为了给大家看比较,一般会直接分类写,不会一个类上出现多个数据源。)

注:@DS("dsName") dsName可以为组名也可以为具体某个库的名称。

4、访问接口查看结果。

先是访问接口1:localhost:8888/dbUser/query-users-for-db-one

如下请求结果,大家请看,成功拿到了db1库中的数据。

再请求下接口2:localhost:8888/dbUser/query-users-for-db-two

如下请求结果,大家请看,成功拿到了db2库中的数据。

再做个测试,我们把db1与db2中的数据同时返回,看看能否成功:

我们先写两接口,然后分别将数据用map返回:

请求结果如下:

然后给大家看下数据库数据,以免被大家说是同一个库中的数据。

好啦,以上就是同mysql数据源的配置流程及实例演示啦,如果还有啥不清楚的小伙伴,欢迎下方留言。接着就是针对后边两种配置方式,就自行尝试啦,看上去都是一样的。

有需求的小伙伴,看完之后,使用起来是不是很简单,压根不需要用传统的mybatis配置多个连接器,mybatis-plus都帮我们封装好啦,开箱即用。

相关推荐
大傻^18 小时前
LangChain4j Spring Boot Starter:自动配置与声明式 Bean 管理
java·人工智能·spring boot·spring·langchain4j
yhole18 小时前
springboot 修复 Spring Framework 特定条件下目录遍历漏洞(CVE-2024-38819)
spring boot·后端·spring
BingoGo19 小时前
Laravel 13 正式发布 使用 Laravel AI 无缝平滑升级
后端·php
l软件定制开发工作室19 小时前
Spring开发系列教程(34)——打包Spring Boot应用
java·spring boot·后端·spring·springboot
随风,奔跑19 小时前
Spring MVC
java·后端·spring
美团技术团队19 小时前
美团 BI 在指标平台和分析引擎上的探索和实践
后端
青槿吖20 小时前
SpringMVC通关秘籍(下):日期转换器、拦截器与文件上传的奇幻冒险
java·开发语言·数据库·sql·mybatis·状态模式
JimmtButler20 小时前
我用 Claude Code 给 Claude Code 做了一个 DevTools
后端·claude
Java水解20 小时前
Java 中实现多租户架构:数据隔离策略与实践指南
java·后端
Master_Azur20 小时前
Java面向对象之多态与重写
后端