SpringBoot多数据源-DynamicDataSource

ops/2024/10/24 8:32:27/

SpringBoot多数据源-DynamicDataSource

  • 1.多数据源应用场景
  • 2.DynamicDataSource原理
  • 3.DynamicDataSource使用
    • 3.1 导入依赖
    • 3.2 application.yml多数据源配置
  • 4.测试

1.多数据源应用场景

  • 读写分离:数据库主节点压力比较大,需要增加从节点提供读操作,以减少压力。
  • 多数据源:一个复杂的单体项目,因为没有拆分成不同的服务,需要连接多个业务的数据源。
  • 多租户数据源切换:大型租户,每个租户有独立的数据源,需要根据当前租户切换对应的数据源

2.DynamicDataSource原理

  1. 使用 AOP 拦截,方法执行前获取到当前方法要用的数据源
  2. 实现自定义 DataSource 接口,实现 DataSource 接口的 getConnect 方法做动态处理

在这里插入图片描述
参考:MyBatis Plus 插件 动态数据源实现原理与源码讲解 (dynamic-datasource-spring-boot-starter-master)

3.DynamicDataSource使用

3.1 导入依赖

  <dependency><groupId>com.baomidou</groupId><artifactId>dynamic-datasource-spring-boot-starter</artifactId><version>3.6.1</version></dependency>

3.2 application.yml多数据源配置

spring:datasource:dynamic:primary: masterstrict: falsedatasource:master:driver-class-name: com.mysql.cj.jdbc.Driverurl: jdbc:mysql://localhost:3306/test_masterusername: rootpassword: rootslave_1:driver-class-name: com.mysql.cj.jdbc.Driverurl: jdbc:mysql://localhost:3306/test_slaveusername: rootpassword: rootmybatis:type-aliases-package: com.rql.entitymapper-locations: classpath:mybatis/*.xml

4.测试

直接使用注解的形式@DS("数据源名称")

java">
@RestController
@RequestMapping("/user")
public class UserController {@AutowiredUserDao userDao;@GetMapping("/a")@DS("slave_1")public List<User> findAll(){return userDao.findAll();}@PostMapping("/b")@DS("master")public void inserUser(@RequestBody User user){userDao.inserUser(user);}
}

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

相关文章

在Linux系统中,禁止有线以太网使用NTP服务器进行时间校准的几种方法

目录标题 方法 1&#xff1a;修改NTP配置以禁止所有同步方法 2&#xff1a;通过网络配置禁用NTP同步方法 3&#xff1a;禁用NTP服务 在Linux系统中&#xff0c;如果想要禁止有线以太网使用NTP服务器进行时间校准&#xff0c;可以通过以下几种方法之一来实现&#xff1a; 方法 …

二百三十三、Flume——Flume采集JSON文件到Kafka,再用Flume采集Kafka数据到HDFS中

一、目的 由于使用了新的Kafka协议&#xff0c;因为根据新的协议推送模拟数据到Kafka中&#xff0c;再Flume采集Kafka数据到HDFS中 二、技术选型 &#xff08;一&#xff09;Kettle工具 准备使用Kettle的JSON input控件和Kafka producer控件&#xff0c;但是搞了1天没搞定&…

在linux中创建c程序

一、创建一个目录&#xff0c;写入一个C文件 示例&#xff0c; 1.创建一个父目录example一个子目录1&#xff1a; mkdir -p example/1 2.进入子目录&#xff1a; cd 1 3.创建一个c文件(尾部以c结尾&#xff0c;若要创建c文件以cpp结尾&#xff0c;创建一个python文件以py结尾)&…

短视频解析接口分发系统

宝塔面板&#xff1a;Nginx系统 php7.2 Mysql 5.6-5.7 伪静态Thinkphp 上传文件直接访问域名安装即可 源码免费下载地址抄笔记 (chaobiji.cn)https://chaobiji.cn/

财务管理困扰外贸公司?软件解决方案大揭秘!

本文将探讨外贸公司在财务管理中遇到的难题&#xff0c;提出可能性的解决方案&#xff0c;并概述理想的外贸财务管理软件应具备哪些必备功能。 一、外贸公司财务管理难题 1、交易币种多样化 如何准确记录不同货币的财务活动&#xff0c;是外贸公司必须面对的问题。外贸公司的…

oracle--存储过程基本框架

1.基本语法 create procedure sp_test is--AS BEGINinsert into emp END; 小例子&#xff1a; create procedure sp_emp_bak is BEGINinsert into emp_bak select * from emp where deptno10;commit; END; --第一步编译&#xff1a;(打开编写的存储过程&#xff0c;点击执行…

Lustre架构介绍的阅读笔记-SMB协议

本文是在阅读Introduction to Lustre* Architecture的Lustre SMB Gateway System Architecture时的笔记。 Lustre只支持Linux系统&#xff0c;但借助Samba可以支持SMB协议&#xff0c;进而对Windows主机提供文件访问能力。 参考资料 Welcome to the CTDB web pages CTDB is …

20240418金融读报:银行参考汇丰全球化布局银行全球化布局现有路径再读金融助力新型工业化

1、银行全球化布局参考汇丰中国市场开拓思路&#xff08;时光机效应&#xff09;&#xff1a;&#xff08;1&#xff09;找对外开放的国家并利用我国现搭建的网络&#xff0c;比如一带一路沿线&#xff08;2&#xff09;找经济向好的国家&#xff08;3&#xff09;投资倾向于全…