三步实现Mybatis(Mybatis-Plus)多数据源配置

news/2024/10/18 2:27:47/

前言

要实现多数据源可以采用dynamic-datasource或者mybatis-mate,本文就以dynamic-datasource为例

dynamic-datasource简介

springboot 快速集成多数据源的启动器 使用文档(opens new window)

  • 支持 数据源分组 ,适用于多种场景 纯粹多库 读写分离 一主多从 混合模式。
  • 支持数据库敏感配置信息 加密 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. 本框架只做 切换数据源 这件核心的事情,并不限制你的具体操作,切换了数据源可以做任何CRUD。
  2. 配置文件所有以下划线 _ 分割的数据源 首部 即为组的名称,相同组名称的数据源会放在一个组下。
  3. 切换数据源可以是组名,也可以是具体数据源名称。组名在切换时采用负载均衡算法切换。
  4. 默认的数据源名称为 master ,你可以通过 spring.datasource.dynamic.primary 修改。
  5. 方法上的注解优先于类上注解。
  6. DS支持继承抽象类上的DS,暂不支持继承接口上的DS。

下面介绍具体使用

第一步:导入依赖

<dependency><groupId>com.baomidou</groupId><artifactId>dynamic-datasource-spring-boot-starter</artifactId><version>4.1.3</version><!--版本自选-->
</dependency>

第二步:编写多数据源配置

以配置MySQL、postgresql两种不太数据库为例

spring:datasource:dynamic:primary: postgresql #设置默认的数据源或者数据源组,默认值即为masterstrict: false #严格匹配数据源,默认false. true未匹配到指定数据源时抛异常,false使用默认数据源datasource:postgresql:  # 名称可以自定义url: jdbc:postgresql://192.168.xxx.xxx:5432/db_name?useUnicode=true&characterEncoding=UTF-8username: rootpassword: xxxdriver-class-name: org.postgresql.Drivermysql:url: jdbc:mysql://192.168.xxx.xxx:3306/db_name?serverTimezone=Asia/Shanghai&useSSL=true&characterEncoding=utf-8&useUnicode=trueusername: rootpassword: xxxdriver-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

第三步:指定数据源

在Mapper层,指定数据源使用@DS(数据源名称)注解,可以注解在方法上或类上,同时存在就近原则 方法上注解 优先于 类上注解。
在这里插入图片描述

如:

import com.baomidou.dynamic.datasource.annotation.DS;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.mxf.springkafka.pojo.KDaylineQfq;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;import java.util.HashMap;
import java.util.List;@Mapper
public interface KDaylineQfqMapper extends BaseMapper<KDaylineQfq> {List<KDaylineQfq> selectByCode(@Param("stockCode") String stockCode);@DS("mysql")List<KDaylineQfq> selectByCode2(@Param("stockCode") String stockCode);@DS("mysql")void insertMysqlData(@Param("data") KDaylineQfq data);@DS("mysql")void insertMysqlBatchData(@Param("data") List<KDaylineQfq> data);
}

http://www.ppmy.cn/news/1115799.html

相关文章

【Python基础】P01S01 变量与字符串

P01S01 变量与字符串 变量变量的命名规则 字符串字符串的表达方法字符串的基本操作 数整数与浮点数数中下划线常量 注释 变量 变量的命名规则 变量名只能包含字母、数字和下划线&#xff1b; 变量名能以字母或下划线开头&#xff0c;但是不能以数字开头&#xff1b; 变量名不能…

Android使用glide时报错“ ����: �޷�����Fragment Glide.with(getContext()) ^ �Ҳ���and”

在gradle.properties中添加下面两行代码 即可 android.useAndroidXtrue android.enableJetifiertrue

Electron(v26.2.1)无法加载React Developer Tools(v4.28.0)

一开始按照electron官网上的 开发者工具扩展 教程设置React Developer Tools时&#xff0c;重启项目后并没有按照预期成功加载React Developer Tools&#xff0c;而且控制台报错&#xff1a; Permission scripting is unknown or URL pattern is malformed.查了下原因是因为Re…

前端开发中常见的跨域问题及解决方案

引言 在前端开发中&#xff0c;跨域问题是一个非常常见的问题。本文将详细介绍什么是跨域&#xff0c;常见的跨域场景&#xff0c;以及各种常用的跨域解决方案。 什么是跨域 跨域是指一个网页或者Web应用在浏览器中发起对另一个域名下资源的请求。由于浏览器的同源策略限制&…

docker快速安装redis,mysql,minio,nacos等常用软件【持续更新】

文章目录 redisnacosminiomysql redis ①拉取镜像 docker pull redis:7.0.5② 创建容器 docker run --restartalways -d -p 6379:6379 --name my-redis redis:7.0.5 redis-server --requirepass "PASSWORD"–requirepass “输入你的redis密码” nacos ①&#xf…

Python(八十七)函数的定义与调用

❤️ 专栏简介&#xff1a;本专栏记录了我个人从零开始学习Python编程的过程。在这个专栏中&#xff0c;我将分享我在学习Python的过程中的学习笔记、学习路线以及各个知识点。 ☀️ 专栏适用人群 &#xff1a;本专栏适用于希望学习Python编程的初学者和有一定编程基础的人。无…

adb操作及常用命令

问题&#xff1a;no devices/emulators found&#xff1a;adb devices 没有连接的设备 解决方案&#xff1a; 大概率是因为usb调试功能没有打开&#xff0c;可以查看手机设备是否开启usb调试功能 Android若未开启&#xff0c;可通过设置-关于手机&#xff0c;连续点击版本号7…

Unity 编辑器常用方法

unity编辑器开发 右键菜单注解菜单栏注解脚本右键注解PrefabUtility 预制体工具1.常用方法&#xff1a;1. InstantiatePrefab(PrefabAssetPath):2. InstantiatePrefabAsGameObject(PrefabAsset):3. ReplacePrefab(GameObject, PrefabAsset, ReplacePrefabOptions):4. ConnectG…