springboot多租户设计过程图解

作者:Oven5217 时间:2021-12-21 08:09:45 

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

1. 概述

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

springboot多租户设计过程图解

2. 先睹为快

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

springboot多租户设计过程图解

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

springboot多租户设计过程图解

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

springboot多租户设计过程图解

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

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

springboot多租户设计过程图解

3.4 动态获取jdbcTemplate

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

springboot多租户设计过程图解

3.5 继续跟进

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

springboot多租户设计过程图解

3.6 Keep Going~

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

springboot多租户设计过程图解

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

springboot多租户设计过程图解

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

springboot多租户设计过程图解

4. 附赠一张租户表

springboot多租户设计过程图解

来源:https://www.cnblogs.com/Oven5217/p/12114964.html

标签:spring,boot,多,租户,设计
0
投稿

猜你喜欢

  • SpringCloud客户端报错:- was unable to send heartbeat!的解决

    2021-08-13 14:08:11
  • SpringBoot注册Filter的两种实现方式

    2023-01-01 10:26:05
  • springboot使用校验框架validation校验的示例

    2021-06-10 18:20:25
  • Java抢红包的红包生成算法

    2023-06-23 20:52:04
  • 深入理解Java并发编程之ThreadLocal

    2023-11-21 02:43:42
  • java实现ArrayList根据存储对象排序功能示例

    2022-01-24 01:06:05
  • spring boot和mybatis集成分页插件

    2021-11-05 10:21:17
  • Java中的内存泄露问题和解决办法

    2022-05-12 20:02:35
  • java实现百度云OCR文字识别 高精度OCR识别身份证信息

    2023-10-24 13:50:37
  • Flutter 容器盒子模型的使用示例

    2023-06-18 18:47:43
  • java调用微信现金红包接口的心得与体会总结

    2022-12-22 19:55:12
  • java面试常问的Runnable和Callable的区别

    2023-11-23 09:23:28
  • Mybatis配置之typeAlias标签的用法

    2023-11-27 20:18:20
  • Spring Boot Security 结合 JWT 实现无状态的分布式API接口

    2021-06-04 05:01:17
  • Java中去除字符串中所有空格的几种方法

    2023-11-24 04:59:24
  • Springboot @Validated和@Valid的区别及使用详解

    2023-05-30 18:40:25
  • Java数组的基本学习教程

    2021-07-14 05:08:00
  • Java 替换word文档文字并指定位置插入图片

    2023-08-12 22:02:25
  • rocketmq如何修改存储路径

    2022-08-20 08:00:57
  • 新手入门Jvm--jvm概览

    2023-11-09 15:42:31
  • asp之家 软件编程 m.aspxhome.com