springboot mysql 多租户_springboot多租户设计过程图解

本文详细介绍了如何在SpringBoot应用中实现多租户设计,通过请求头中的tenant信息动态选择数据源。文章涉及的技术栈简单,主要利用了动态数据源切换,确保不同租户的数据隔离。在系统启动时,需要指定默认数据源,并在运行时根据需求初始化其他数据源。
摘要由CSDN通过智能技术生成

这篇文章主要介绍了springboot多租户设计过程图解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下

1. 概述

根据不同用户的请求,选择不同的数据源,不同的数据源可以是Oracle、MySQL或者其它。用到的技术栈,没有什么复杂的技术,可以看到,依赖也就加了几个而已,如下:

7a53413ba365e57a0943aa8156038eae.png

2. 先睹为快

如下图,header中tenant为zhangsan,则使用db_oauth为数据源,tenant为lisi,则使用db_test为数据源,tenant为wangwu,则使用db_jxc为数据源。不同的数据源可以是不同的数据库类型,这里为了演示统一使用了MySQL,用不同的库作为不同的数据源。

190512dbbae7816e8fe7447f836a365c.png

3. 实现原理3.1 先看一下入口这个controller,一个很正常的controller.

fe677a353cf3548274e54693aa0a27a2.png

3.2 跟进service层,看一下这个bookService,一个正常的不能再正常的service.

7bac571826d1ca7cd1da95f19372d153.png

3.3 跟进dao层,看一下这个bookDao

一个正常…似乎有些不正常的dao,主要是这里的这个jdbcTemplate,不是像以前一样直接通过@Resource注入进来的,而是通过父类的getJdbcTemplate方法获取的,下一步进到这个方法里边看个究竟。

af88cfed75d0d08de4966c180a025a45.png

3.4 动态获取jdbcTemplate

这里注入了一个datasourceProvider,首先从request的header中获取租户的标志,然后通过datasourceProvider的selectDataSource方法获取数据源。

b0d860727be2920bc3919ba78f86e45e.png

3.5 继续跟进

这里通过一个map存储着所有的数据源,如果没有初始化,就将所有的数据源初始化完毕,然后放到这个map中,在使用的时候,通过租户标志从map中获取。也可以改成懒加载的模式,即下边注释的代码,在需要的时候才进行数据源的初始化,然后放到map中,供以后使用。

dc0b19020072a0e063f11390d515254c.png

3.6 Keep Going~

进去看一下这个map里边put的是什么东西。首先从租户数据源配置表中获取所有的配置,然后对这些数据源进行一个个的初始化。getDataSouce方法中,也对数据源进行了一个map的映射,先放到一个容器中,如果初始化过了,直接拿出来使用即可。

c4e7ccb96ebf2aefd5aa848a85799598.png

3.7 这里才是真正的数据源初始化的地方,这里使用了druid,传统的生成方式而已,没有什么特别的地方。

a6bea3401ecc2465986d6a787edbf0f4.png

3.8 需要注意的是,在系统启动的时候,需要指定一个默认的数据源,这个数据源中存放着租户的配置信息。

7ae5e8716c5d92f4304146f1a9991d95.png

4. 附赠一张租户表

397e59904780fbd23d865b0d4d64ea24.png

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持云海天教程。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值