springboot多租户设计过程图解

 更新时间:2019年12月31日 10:45:10   作者:Oven5217  
这篇文章主要介绍了springboot多租户设计过程图解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下

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

1. 概述

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

2. 先睹为快

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

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

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

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

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

3.4 动态获取jdbcTemplate

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

3.5 继续跟进

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

3.6 Keep Going~

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

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

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

4. 附赠一张租户表

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

相关文章

  • SpringBoot集成tika实现word转html的操作代码

    SpringBoot集成tika实现word转html的操作代码

    Tika是一个内容分析工具,自带全面的parser工具类,能解析基本所有常见格式的文件,得到文件的metadata,content等内容,返回格式化信息,本文给大家介绍了SpringBoot集成tika实现word转html的操作,需要的朋友可以参考下
    2024-06-06
  • 全网最详细Hutool工具详解

    全网最详细Hutool工具详解

    Hutool的目标是使用一个工具方法代替一段复杂代码,从而最大限度的避免“复制粘贴”代码的问题,彻底改变我们写代码的方式。这篇文章主要介绍了全文最详细Hutool工具详解,需要的朋友可以参考下
    2021-12-12
  • java排序算法之选择排序详解

    java排序算法之选择排序详解

    这篇文章主要为大家详细介绍了java排序算法之选择排序,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2021-05-05
  • redis incr和incrBy的使用说明

    redis incr和incrBy的使用说明

    这篇文章主要介绍了redis incr和incrBy的使用说明,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2020-11-11
  • Java中关于char类型变量能够输出中文的问题

    Java中关于char类型变量能够输出中文的问题

    这篇文章主要介绍了Java中关于char类型变量能够输出中文的问题,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2022-12-12
  • 一文快速了解spring boot中的@idempotent注解

    一文快速了解spring boot中的@idempotent注解

    idempotence注解是RESTful API设计中一个重要的概念,它可以保证操作的可靠性和一致性,下面这篇文章主要给大家介绍了关于spring boot中@idempotent注解的相关资料,需要的朋友可以参考下
    2024-01-01
  • java字符串日期类Date和Calendar相互转化及相关常用方法

    java字符串日期类Date和Calendar相互转化及相关常用方法

    Java语言的Calendar(日历),Date(日期),和DateFormat(日期格式)组成了Java标准的一个基本但是非常重要的部分,下面这篇文章主要给大家介绍了关于java字符串日期类Date和Calendar相互转化及相关常用方法的相关资料,需要的朋友可以参考下
    2023-12-12
  • 关于springcloud报错报UnsatisfiedDependencyException的问题

    关于springcloud报错报UnsatisfiedDependencyException的问题

    这篇文章主要介绍了关于springcloud报错报UnsatisfiedDependencyException的问题,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2020-11-11
  • Java反射实现多属性去重与分组功能

    Java反射实现多属性去重与分组功能

    在Java开发中,​​List是一种非常常用的数据结构,通常我们会遇到这样的问题:如何处理​​List​​​中的相同字段?无论是去重还是分组,合理的操作可以提高代码的性能和可读性,本文将详细介绍如何基于反射的Java集合动态去重与分组功能,需要的朋友可以参考下
    2025-06-06
  • java反射深入剖析(推荐)

    java反射深入剖析(推荐)

    下面小编就为大家带来一篇java反射深入剖析。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2016-07-07

最新评论