首页 > 其他分享 >spring多数据源动态切换的实现原理及实现

spring多数据源动态切换的实现原理及实现

时间:2024-03-30 22:04:08浏览次数:26  
标签:实现 数据源 数据库 选择 租户 spring 读写

AbstractRoutingDataSource是Spring框架中的一个抽象类,可以实现多数据源的动态切换和路由,以满足复杂的业务需求和提高系统的性能、可扩展性、灵活性。

应用场景
多租户支持:对于多租户的应用,根据当前租户来选择其对应的数据源,实现租户级别的隔离和数据存储。
分库分表:为了提高性能和扩展性,将数据分散到多个数据库或表中,根据分片规则来选择正确的数据源,实现分库分表。
读写分离:为了提高数据库的读写性能,可能会采用读写分离的方式,根据读写操作的类型来选择合适的数据源,实现读写分离。
数据源负载均衡:根据负载均衡策略来选择合适的数据源,将请求均匀地分配到不同的数据源上,提高系统的整体性能和可伸缩性。
多数据库支持:在一些场景下,可能需要同时连接多个不同类型的数据库,如关系型数据库、NoSQL数据库等。根据业务需求选择不同类型的数据源,实现对多数据库的支持。
实现原理
AbstractRoutingDataSource实现了DataSource接口,作为一个数据源的封装类,负责路由数据库请求到不同的目标数据源
该类中定义了一个determineTargetDataSource方法,会获取当前的目标数据源标识符,进而返回真正的数据源;
值得注意的是:其中determineCurrentLookupKey 为抽象方法,明显是要让用户自定义实现获取数据源标识的业务逻辑。
当系统执行数据库操作之前,会先获取数据源链接,即调用getConnection方法,该类重写的getConnection方法,会获取到真正的目标数据源,进而将数据库操作委托给目标数据源进行处理。

标签:实现,数据源,数据库,选择,租户,spring,读写
From: https://blog.csdn.net/wjianwei666/article/details/137007176

相关文章

  • 栈实现及其应用
    一、栈-顺序栈的原理1.1栈栈:限制在一端进行插入操作和删除操作的线性表(俗称堆栈)。栈顶:允许进行操作的一端称为“栈顶”。栈底:另一固定端称为“栈底”。空栈:当栈中没有元素时称为“空栈”。特点:后进先出(LIFO)。1.2栈的应用1、浏览器的前进后退功能:通过顺序栈......
  • SpringBoot 手动控制事务,即编程式事务
    前置知识Spring事务默认只在发生未捕获的RuntimeException时才回滚SpringAOP异常捕获需要被拦截的方法显式的抛出异常。默认情况下AOP只捕获RuntimeException类的异常,但可以通过配置来捕获特定的异常手动控制事务案例在日常开发中,如果没办法使用@Transactional注......
  • 【数据结构】用C语言实现单链表及其常见操作
    【数据结构】用C语言实现单链表及其常见操作链表是一种常用的基础数据结构,可以快速插入和删除数据,但是不能随机访问。那么它在内存中是怎么存储的呢?它和数组不同,数组在内存中是连续存储的,而链表不一定是连续的,它们之间是通过指针来连接的。指针是C语言中最重要的特性之一。那......
  • 使用OpenEuler x86_64 实现Bouncycastle SM2加解密
    使用OpenEulerx86_64实现BouncycastleSM2加解密一、安装运行环境安装java和mavensudoyuminstalljava-17-openjdksudoyuminstallmaven安装完成后,你就可以在OpenEuler上使用Maven来管理Java项目了。二、创建项目工程在项目根目录下创建pom.xml文件用......
  • 杨辉三角形(c++实现)
    题目下面的图形是著名的杨辉三角形:如果我们按从上到下、从左到右的顺序把所有数排成一列,可以得到如下数列:1,1,1,1,2,1,1,3,3,1,1,4,6,4,1,…给定一个正整数N,请你输出数列中第一次出现N是在第几个数?输入输入一个整数N。输出输出一个整数代......
  • java毕业设计企业人事管理系统(Springboot+mysql+jdk1.8+maven3.39)
    本系统(程序+源码)带文档lw万字以上 文末可领取本课题的JAVA源码参考系统程序文件列表系统的选题背景和意义选题背景:随着信息技术的快速发展,企业管理逐渐向数字化、智能化方向迈进。人事管理作为企业内部管理的重要组成部分,其信息化水平直接关系到企业的运行效率和管理水......
  • java毕业设计汽车零件厂绩效管理(Springboot+mysql+jdk1.8+maven3.39)
    本系统(程序+源码)带文档lw万字以上 文末可领取本课题的JAVA源码参考系统程序文件列表系统的选题背景和意义选题背景:在现代企业管理中,绩效管理是连接企业战略目标与员工个人目标的桥梁,它对于提升员工工作积极性、优化团队协作效率以及推动企业持续发展具有重要作用。对于......
  • 【攻防技术系列+漏洞复现】-- Spring篇
    阅读用时:20min一、什么是springSpring框架是一个功能强大的Java应用程序框架,旨在提供高效且可扩展的开发环境。其本身也是模块化的,应用程序可以选择所需要的模块。这些模块缩短应用程序的开发时间,提高了应用开发的效率例如,在JavaWeb开发的早期阶段,程序员需要编写大量的代......
  • 不读概念,用过程轻松理解并实现拓扑排序
    目录1.有向无环图2.AOV网:顶点活动图3.拓扑排序4.实现拓扑排序5.力扣OJ1.有向无环图顾名思义,边有向,图中没有回路。这里只需要知道各顶点的入度和出度怎么计算即可。2.AOV网:顶点活动图在有向无环图中,用顶点来表示一个活动,用边来表示活动的先后顺序的图结构。......
  • Spring Boot 基本配置之依赖管理starter pom
    在SpringBoot快速搭建中搭建了一个没有任何功能的项目,查看其pom.xml文件:项目pom.xml文件有两个核心依赖,分别是spring-boot-starter-parent和spring-boot-starter。仔细观察可知spring-boot-starter-parent中有版本号,而spring-boot-star......