zoukankan      html  css  js  c++  java
  • 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. 附赠一张租户表

  • 相关阅读:
    jquery实现密码框显示提示文字
    Jquery显示和隐藏的4种简单方法
    JavaScript创建对象的写法
    jQuery实现用户注册的表单验证
    Jquery操作Cookie取值错误的解决方法
    java泛型笔记一
    数字电路与系统-组合逻辑电路的竞争冒险现象1
    数字电路与系统-组合逻辑电路分析和设计
    数字电路与系统-逻辑函数的化简
    数字电路与系统-逻辑函数及其描述方法
  • 原文地址:https://www.cnblogs.com/Oven5217/p/12114964.html
Copyright © 2011-2022 走看看