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

ops/2024/12/14 22:09:48/

一、前言🔥

环境说明: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 #设置默认的数据源或者数据源组,默认值即为masterstrict: 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-8username: rootpassword: 123456slave_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=utf8username: rootpassword: 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都帮我们封装好啦,开箱即用。


http://www.ppmy.cn/ops/141921.html

相关文章

CentOS7 安装Selenium(使用webdriver_manager自动安装ChromeDriver)

在 CentOS 7 上安装 Selenium 通常涉及几个步骤&#xff0c;包括安装 Python、安装 Selenium 库、安装 WebDriver 以及配置环境。以下是详细的步骤&#xff1a; 1. 安装 Python 和 pip 如果你的系统中还没有安装 Python 和 pip&#xff0c;可以使用以下命令进行安装&#xff…

Git-基础操作命令

目录 Git基础操作命令 case *查看提交日志 log 版本回退 get add . Git基础操作命令 我们创建并且初始化这个仓库以后&#xff0c;我们就要在里面进行操作。 Git 对于文件的增删改查存在几个状态&#xff0c;这些修改状态会随着我们执行Git的命令而发生变化。 untracked、…

stm32 hal使用sysTick定时器非阻塞延时方法

简介 一种在stm32 hal库中实现非阻塞任务处理扫描的方式。 stm32f1xx_it.c /* USER CODE BEGIN 0 */ uint8_t Time_1ms 0; uint8_t Time_10ms 0;/* USER CODE END 0 *//*** brief This function handles System tick timer.*/ void SysTick_Handler(void) {/* USER CODE B…

Java面试八股文(2025最新整理)

Java的特点 Java是一门面向对象的编程语言。面向对象和面向过程的区别参考下一个问题。 Java具有平台独立性和移植性。 Java有一句口号&#xff1a;Write once, run anywhere&#xff0c;一次编写、到处运行。这也是Java的魅力所在。而实现这种特性的正是Java虚拟机JVM。已编…

JavaScript 原型对象与原型链的魔法与艺术

在JavaScript的世界里&#xff0c;原型对象和原型链是两个非常重要的概念。它们不仅帮助我们理解对象的创建过程&#xff0c;还为我们提供了一种高效的方式来管理共享的属性和方法。本文将深入探讨JavaScript中的原型对象和原型链&#xff0c;包括它们的定义、工作原理以及在实…

高阶函数:JavaScript 编程中的魔法棒

在JavaScript的世界里&#xff0c;高阶函数是一种强大的工具&#xff0c;它允许我们将函数作为参数传递或将函数作为返回值。这种特性使得JavaScript代码更加灵活和强大。本文将深入探讨高阶函数的定义、用法以及在实际项目中的最佳实践&#xff0c;帮助大家更好地理解和应用这…

Yet another PFC(新样式 PFC)

PFC 在依靠简单廉价兼容性而成功的以太网上弄巧成拙&#xff0c;但有 101 种优化它的方法&#xff0c;但代价是交换机越来越复杂。以太网的基因是简单廉价&#xff0c;这体现在以太帧的结构上&#xff0c;以太帧结构决定了交换机的能力上限&#xff0c;这是核心。核心认知不够&…

优化Go语言中的网络连接:设置代理超时参数

网络连接优化的重要性 在分布式系统和微服务架构中&#xff0c;网络请求的效率直接影响到整个系统的响应速度。合理的超时设置可以防止系统在等待网络响应时陷入无限期的阻塞&#xff0c;从而提高系统的吞吐量和用户体验。特别是在使用代理服务器时&#xff0c;由于增加了网络…