欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

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

程序员文章站 2023-12-19 12:46:04
前言 本文的多租户是基于多数据库进行实现的,数据是通过不同数据库进行隔离。下面话不多说,来看看详细的介绍: mycat 基本配置 首先针对多租户配置了多个数据库,在...

前言

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

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 执行时就会自动将数据库的操作发送到指定的数据库上执行,通过这种方式就实现了一种简单的多租户方式。

总结

以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作能带来一定的帮助,如有疑问大家可以留言交流,谢谢大家对的支持。

上一篇:

下一篇: