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. 附赠一张租户表

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

相关文章

  • java实现用户自动登录

    java实现用户自动登录

    这篇文章主要为大家详细介绍了java用户自动登录的实现方法,分为六个步骤实现用户自动登录,并验证用户是否已经登录,感兴趣的小伙伴们可以参考一下
    2016-03-03
  • ArrayList删除集合中某一属性相同的元素方法(推荐)

    ArrayList删除集合中某一属性相同的元素方法(推荐)

    下面小编就为大家带来一篇ArrayList删除集合中某一属性相同的元素方法(推荐)。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2016-09-09
  • 适用于Java初学者的学习路线图

    适用于Java初学者的学习路线图

    这篇文章主要介绍了学习Java的路线图的五个必经阶段,还有一些作者的想法分享给大家,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2016-09-09
  • Java POI实现将导入Excel文件的示例代码

    Java POI实现将导入Excel文件的示例代码

    这篇文章主要介绍了Java POI实现将导入Excel文件的示例代码,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2019-02-02
  • intellij idea创建第一个动态web项目的步骤方法

    intellij idea创建第一个动态web项目的步骤方法

    这篇文章主要介绍了intellij idea创建第一个动态web项目的步骤方法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2019-10-10
  • struts2中simple主题下<s:fieldError>标签默认样式的移除方法

    struts2中simple主题下<s:fieldError>标签默认样式的移除方

    这篇文章主要给大家介绍了关于struts2中simple主题下<s:fieldError>标签默认样式的移除方法,文中通过示例代码介绍的非常详细,需要的朋友可以参考借鉴,下面随着小编来一起学习学习吧
    2018-10-10
  • Java版超大整数阶乘算法代码详解-10,0000级

    Java版超大整数阶乘算法代码详解-10,0000级

    这篇文章主要介绍了Java版超大整数阶乘算法代码详解-10,0000级,具有一定借鉴价值,需要的朋友可以参考下
    2018-01-01
  • spring security 5.x实现兼容多种密码的加密方式

    spring security 5.x实现兼容多种密码的加密方式

    spring security针对该功能有两种实现方式,一种是简单的使用加密来保证基于 cookie 的 token 的安全,另一种是通过数据库或其它持久化存储机制来保存生成的 token。这篇文章主要给大家介绍了关于spring security 5.x实现兼容多种密码的加密方式,需要的朋友可以参考下。
    2018-01-01
  • java 抽象类的实例详解

    java 抽象类的实例详解

    这篇文章主要介绍了java 抽象类的实例详解的相关资料,希望通过本大家能理解掌握这部分内容,需要的朋友可以参考下
    2017-09-09
  • Java 按照字节来截取字符串的代码(不会出现半个汉字)

    Java 按照字节来截取字符串的代码(不会出现半个汉字)

    Java 按照字节来截取字符串的工具,不会出现半个汉字。一个中文两个字节,一个英文字符只占 1 个字节** 1. 通常我们用于前端显示的时候,防止标题过长
    2014-01-01

最新评论