MyBatis利用MyCat实现多租户的简单思路分享

作者:isea533 时间:2022-08-16 18:58:33 

前言

本文的多租户是基于多数据库进行实现的,数据是通过不同数据库进行隔离。下面话不多说,来看看详细的介绍:

MyCat 基本配置

首先针对多租户配置了多个数据库,在 MyCat 的 schema.xml 中配置了多个 schema。

MyBatis利用MyCat实现多租户的简单思路分享

在 server.xml 中配置了一个用户:

MyBatis利用MyCat实现多租户的简单思路分享

后面会使用 MyCat 注解(就是注释)方式根据不同的标识,将操作指向不同的数据库。

过滤器识别请求匹配对应的数据库

标识有很多种方式可以加以区分,下面使用最简单的一种,通过不同的二级域名进行识别。二级域名和数据库对应的信息可以通过全局库或者公共库进行存储,还可以是简单的配置文件进行配置,不过下面代码只是为了演示,因此配置信息都是写死在代码中的。

假设存在以下二级域名,分别对应不同的数据库:

  • ui1.mybatis.tk :UI1

  • ui2.mybatis.tk :UI2

  • ui3.mybatis.tk :UI3

通过过滤器,在用户请求时根据请求地址设置当前请求使用的数据库:

MyBatis利用MyCat实现多租户的简单思路分享

这段代码只是很简单的判断,根据不同的字符串设置不同的数据库。使用了一个静态的本地线程变量来存储数据库信息。

重写 MyBatis 的 MappedStatement 简单实现 MyCat 注解

使用 MyBatis 和数据库进行操作时,所有执行的 sql 都是通过 MappedStatement 获取的,虽然通过 * 方式也能给 sql 添加注解,但是实现起来有点复杂。通过重写 MappedStatement 会简单很多,但是你也需要保证重写的这个类能够替代默认的类。

重写很简单,只需要修改原有的 getBoundSql 方法:

MyBatis利用MyCat实现多租户的简单思路分享

这段代码就是在返回 BoundSql 前,修改 sql,添加 /*!mycat:schema=数据库*/,具体的数据库从过滤器的静态方法获取,由于每一个请求都会经过过滤器(特别注意,如果是任务一类的调用,不需要经过过滤器,这种情况需要处理任务执行时数据库的绑定,这需要根据具体业务实现),因此这里的操作一定能获取到具体的数据库。增加这个注解后,MyCat 执行时就会自动将数据库的操作发送到指定的数据库上执行,通过这种方式就实现了一种简单的多租户方式。

来源:http://blog.csdn.net/isea533/article/details/56282316

标签:mybatis,多租户,mycat
0
投稿

猜你喜欢

  • Java中线程的等待与唤醒_动力节点Java学院整理

    2023-07-17 04:03:05
  • SpringCloud Gateway使用详解

    2023-11-27 02:54:36
  • jQuery 动画效果代码分享

    2023-11-24 00:10:12
  • springboot实现在工具类(util)中调用注入service层方法

    2021-06-17 20:02:51
  • Java读取json数据并存入数据库的操作代码

    2023-09-23 06:00:57
  • 基于JAVA文件中获取路径及WEB应用程序获取路径的方法

    2022-08-21 01:26:57
  • Java emoji持久化mysql过程详解

    2023-10-10 23:11:49
  • 十分钟理解Java中的动态代理

    2022-05-16 04:53:19
  • java 根据经纬度获取地址实现代码

    2023-09-05 04:54:50
  • java语言实现猜数字游戏

    2023-11-24 00:19:38
  • java 输入一个数字组成的数组(输出该数组的最大值和最小值)

    2023-11-24 21:41:58
  • JAVA实现长连接(含心跳检测Demo)

    2023-08-05 09:51:13
  • java中初始化MediaRecorder的实现方法

    2023-11-29 03:54:52
  • spring springMVC中常用注解解析

    2023-09-14 20:45:46
  • java基于包结构的请求路由实现实例分享

    2021-10-23 13:10:18
  • Spring Native打包本地镜像的操作方法(无需通过Graal的maven插件buildtools)

    2023-11-25 04:24:30
  • Java访问WebService返回XML数据的方法

    2023-11-10 21:23:09
  • springmvc 分页查询的简单实现示例代码

    2022-01-09 11:08:22
  • Java基础之面向对象机制(多态、继承)底层实现

    2023-11-12 02:59:59
  • javaWeb使用servlet搭建服务器入门

    2023-11-21 04:47:45
  • asp之家 软件编程 m.aspxhome.com