`
m635674608
  • 浏览: 5041713 次
  • 性别: Icon_minigender_1
  • 来自: 南京
社区版块
存档分类
最新评论

MyBatis 使用 MyCat 实现多租户的一种简单思路

 
阅读更多

本文的多租户是基于多数据库进行实现的,数据是通过不同数据库进行隔离。

MyCat 基本配置

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

在 server.xml 中配置了一个用户: 
这里写图片描述

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

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

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

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

  1. ui1.mybatis.tk :UI1
  2. ui2.mybatis.tk :UI2
  3. ui3.mybatis.tk :UI3

通过过滤器,在用户请求时根据请求地址设置当前请求使用的数据库: 
这里写图片描述

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

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

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

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

这里写图片描述

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

 

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

分享到:
评论

相关推荐

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

    在本文中,我们将探讨如何使用 MyBatis 和 MyCat 实现多租户的简单思路。 多租户是指在同一个应用程序中,多个租户共享同一个数据库实例,每个租户拥有自己的独立数据库实例,而不是共享同一个数据库实例。这种架构...

    基于mybatis-plus实现多租户级别的数据隔离

    在IT行业中,多租户架构是一种常见的设计模式,特别是在云服务和SaaS应用中,它允许服务提供商为多个客户提供独立的、隔离的数据环境。Mybatis-Plus是一个强大的Mybatis扩展,它提供了许多便利功能,如简化 CRUD ...

    基于Springboot+MyBatis-Plus实现多租户动态数据源模式源码.zip

    基于Springboot+MyBatis-Plus实现多租户动态数据源模式源码.zip该项目是个人98分高分大作业设计项目源码,已获导师指导认可通过,都经过严格调试,确保可以运行!放心下载使用。基于Springboot+MyBatis-Plus实现多...

    mybatis-实现多租户.zip

    实现多租户MyBatis的核心思路通常有以下几种: - **数据隔离**:为每个租户创建单独的数据库或数据库实例,每个租户的数据完全独立,避免了数据混淆。在查询时,根据租户ID动态修改SQL连接字符串。 - **Schema隔离...

    基于Springboot+MyBatis-Plus实现多租户动态数据源模式源码(高分毕业设计).zip

    基于Springboot+MyBatis-Plus实现多租户动态数据源模式源码(高分毕业设计).zip已获导师指导并通过的高分毕业设计项目,也可作为课程设计和期末大作业,下载即用无需修改,项目完整确保可以运行。 【备注】 主要...

    详解基于Mybatis-plus多租户实现方案

    - 在使用多租户时,必须确保租户ID的安全性,防止未授权访问其他租户的数据。 - 要考虑性能问题,大量租户共享数据库可能会导致查询效率下降,可能需要优化索引和查询策略。 - 在设计数据库表时,需要预留租户ID...

    Java开发系列MyBatis使用以及实现

    Java开发系列MyBatis使用以及实现Java开发系列MyBatis使用以及实现Java开发系列MyBatis使用以及实现Java开发系列MyBatis使用以及实现Java开发系列MyBatis使用以及实现Java开发系列MyBatis使用以及实现Java开发系列...

    Mybatis基于注解实现多表查询功能

    在实际开发中,我们经常需要从多个表中检索数据,这时就需要使用多表查询。 二、Mybatis基于注解实现多表查询的优点 使用Mybatis基于注解实现多表查询功能有以下优点: 1. 简化配置:使用注解可以简化XML配置,...

    mybatis-plus-multi-tenancy_springboot多租户实现例子.zip

    这个“mybatis-plus-multi-tenancy_springboot多租户实现例子.zip”压缩包提供了一个使用SpringBoot和MyBatis Plus实现多租户系统的示例。以下是对这个项目的关键知识点的详细解释: 1. **多租户架构**:多租户是指...

    基于Springboot+MyBatis+MySQL实现多功能个人博客系统+本科毕业设计+课程设计

    基于Springboot+MyBatis+MySQL实现多功能个人博客系统 项目经过严格测试,确保可以运行! 功能点: 用户注册登录功能 Markdown文章发布功能 文章分页显示 文章分类 文章标签/标签云 文章点击量 阅读排行 赞...

    SaaS+多租户系统数据隔离实现方案

    而MyBatis-Plus多租户插件提供了一种高效的解决方案,可大幅降低在多租户系统中实现数据隔离的复杂度,同时保证了系统性能和数据的安全性,这对于构建大规模SaaS平台的企业而言,无疑是一个重要工具。企业应深入理解...

    mybatis简单使用demo

    mybatis简单使用mybatis简单使用demomybatis简单使用demomybatis简单使用demomybatis简单使用demomybatis简单使用demomybatis简单使用demomybatis简单使用demomybatis简单使用demomybatis简单使用demomybatis简单...

    基于SpringBoot+Mybatis-Plus+ Vue2的多租户SaaS 开发框架,支持消息队列、数据权限、动态源、多租户

    基于SpringBoot | Mybatis-Plus | RabbitMQ | Vue2 | Element-UI | flowable 的多租户SaaS 开发框架,已支持消息队列、数据权限、动态源、多租户、工作流、数据物理&逻辑双隔离等,为企业级多租户Saas及集团化应用...

    基于SpringBoot+Mybatis+Vue实现的一个在线选课系统.zip

    基于SpringBoot+Mybatis+Vue实现的一个在线选课系统 基于SpringBoot+Mybatis+Vue实现的一个在线选课系统 基于SpringBoot+Mybatis+Vue实现的一个在线选课系统 基于SpringBoot+Mybatis+Vue实现的一个在线选课系统 基于...

    MyBatis之自查询使用递归实现 N级联动效果(两种实现方式)

    MyBatis是一个功能强大且灵活的持久层框架,它支持自查询和递归查询,下面我们将探讨如何使用MyBatis实现 N级联动效果。 递归查询 递归查询是指在一个查询中调用自身的查询,以便实现某些复杂的查询逻辑。在...

    mybatis-sqlhelper:mybatis 通用多租户插件、自动注入插件

    Mybatis-Sqlhelper 是一款针对 Mybatis 框架设计的插件,它专门解决了多租户问题并提供了自动注入功能,极大地提升了开发效率和系统的可扩展性。下面我们将详细探讨这个插件的核心功能和实现机制。 首先,我们来看...

    MyBatis自动分页实现

    幸运的是,MyBatis 提供了一个自动分页实现的解决方案,使得开发者可以轻松地实现分页功能。 MyBatis 自动分页实现原理 MyBatis 自动分页实现的关键是使用拦截器来拦截 SQL 语句并将其修改为分页查询语句。拦截器...

    mybatis拦截器实现通用权限字段添加的方法

    MyBatis拦截器是一种非常实用的技术,可以用来实现各种复杂的数据库操作。本文将详细介绍如何使用MyBatis拦截器来实现通用权限字段添加,达到灵活、可靠、可维护的数据库操作。 MyBatis拦截器是什么 MyBatis拦截器...

Global site tag (gtag.js) - Google Analytics