【RuoYi-SpringBoot3-Pro】:多租户功能上手指南

简介: RuoYi-SpringBoot3-Pro集成MyBatis-Plus多租户插件,自动注入tenant_id过滤条件,实现数据隔离。通过简单配置即可开启多租户,支持系统表免隔离、超级管理员跨租户查看,提升SaaS开发效率。结合AI建表工具,快速完成数据库初始化。

【RuoYi-SpringBoot3-Pro】:多租户功能上手指南

做 SaaS 系统最头疼的是什么?肯定是数据隔离

RuoYi-SpringBoot3-Pro 直接集成了 MyBatis-Plus 的多租户插件(TenantLineInnerInterceptor),不用再关注租户 ID,框架层自动给你注入过滤条件。配合 使用 Dify + AI 快速生成多数据库建表语句,使开发效率直线提升!

开启配置

多租户功能默认是关闭的。在 ruoyi-admin 下面的 application.yml 里找 tenant 配置:

tenant:
  enable: true # 把它改成 true,多租户就生效了
  column: tenant_id # 你的表里用来区分租户的字段名,一般都叫 tenant_id
  filterTables: # 这里的表,会强制进行 SQL 过滤
  ignoreTables: # 这些表是不进行租户隔离的
    - sys_user # 用户表
    - sys_role # 角色表
    - sys_menu # 菜单表
    - sys_dept # 部门表
    - sys_dict_data # 字典数据
    # ... 省略其它系统表
  ignoreLoginNames: # 超级管理员,让他能看所有租户的数据
    - admin

由于 RuoYi-SpringBoot3-Pro 是在 RuoYi-Vue3 基础上的增强版,本着只做增强,不做改变 的原则,原来系统的表只在 sys_user 中添加了 tenant_id。有需要的小伙伴需要自行扩展。

实现代码

就像开头所说,其实实现特别简单,就是用 MyBatis-Plus 的拦截器。

ruoyi-framework/src/main/java/com/ruoyi/framework/config/MybatisPlusConfig.java,中设置:

@Bean
public MybatisPlusInterceptor mybatisPlusInterceptor(TenantProperties tenantProperties) {
   
    MybatisPlusInterceptor interceptor = new MybatisPlusInterceptor();
    if (Boolean.TRUE.equals(tenantProperties.getEnable())) {
   
        // 启用多租户插件拦截
        interceptor.addInnerInterceptor(new TenantLineInnerInterceptor(new MultiTenantHandler(tenantProperties)));
    }
    // ...
    return interceptor;
}

它注册了一个 TenantLineInnerInterceptor,并传入了一个 MultiTenantHandler。这个 Handler 位于 ruoyi-framework/src/main/java/com/ruoyi/framework/config/MybatisPlusConfig.java,它会:

  1. 从当前登录用户信息里取出 tenantId
  2. 判断当前表需不需要隔离(看是不是在 ignoreTables 里)。
  3. 如果需要隔离,就在你的 SQL 后面自动追加 AND tenant_id = 123

注意事项

  • 多租户不等于权限过滤,租户之间是完全隔离的。
  • 由于多租户ID 是从当前登录用户信息获取,所以像定时任务的处理,需要自行根据业务逻辑判断。
  • 启用多租户后,所有执行的 method 的 SQL 都会进行处理。
  • 自定义的 SQL 请按规范书写,特别是涉及到多个表的每个表都要给别名,特别是 inner join 的要写标准的 inner join。

往期教程合集

RuoYi-SpringBoot3-Pro

目录
相关文章
|
前端开发
前端Vue3使用Moment Timezone处理不同时区时间
认识基本时间表示字符,UTC,GMT等,用 moment-timezone 这个插件来获取时区,同时获取带时区的时间字段,以便后续业务处理。
1444 1
|
6月前
|
应用服务中间件 Linux 网络安全
CentOS 7 安装 nginx-1.3.15.tar.gz 详细步骤(从源码编译到启动配置)
本文详解Nginx 1.3.15源码编译安装全流程:从yum安装gcc、pcre、zlib、openssl等依赖,到下载解压、configure配置(指定路径及SSL/PCRE/zlib模块)、make编译、make install安装,再到启动、测试及常用命令(-s stop/reload/-t)。附端口占用、库缺失、防火墙等常见问题解决。
|
8月前
|
人工智能 开发框架 JSON
【RuoYi-SpringBoot3-Pro】:AI 能力再扩展,一个方法打通 n8n 工作流
RuoYi-SpringBoot3-Pro 集成 n8n,通过一个 Webhook 方法实现 AI 能力扩展。Java 端轻量触发,复杂 AI 工作流由 n8n 可视化编排,支持文本处理、文件上传等场景,灵活高效,助力企业级应用快速集成自动化能力。
606 5
|
8月前
|
关系型数据库 Java 数据库连接
【RuoYi-SpringBoot3-Pro】:MyBatis-Plus 集成
RuoYi-SpringBoot3-Pro 集成 MyBatis-Plus 3.5.12,提供分页、乐观锁、多租户、Lambda 查询等核心功能,支持动态条件构建与代码生成,提升开发效率,助力企业级 SaaS 应用快速开发。
1370 0
|
JSON Java 数据格式
java中json与list转换方法
java中json与list转换方法
1933 0
java中json与list转换方法
|
8月前
|
运维 JavaScript Java
Java精品项目:基于SaaS的多租户ERP系统源码(含生产、财务、OA)
云ERP是面向小微企业的SaaS多租户管理系统,集成进销存、MRP生产、品质、仓储、财务、CRM、OA等一体化功能。基于SpringBoot+Vue架构,支持云端一键部署,具备高度集成、实时协同、灵活配置与安全可靠等核心优势,助力企业数字化转型。
569 0
|
8月前
|
XML Java 数据库连接
【RuoYi-Eggjs】:告别手写,自动生成代码
【RuoYi-Eggjs】是一款面向 Egg.js 项目的自动化代码生成工具,通过解析 MyBatis 风格的 XML Mapper 文件,智能生成标准化的 Service 层代码,彻底告别重复手写。支持实时监听、多数据库映射与内网穿透,提升开发效率与规范性。
384 7
|
8月前
|
SQL 人工智能 关系型数据库
【RuoYi-SpringBoot3-Pro】:想要什么数据库都有!三步教你轻松添加新支持
RuoYi-SpringBoot3-Pro 支持多数据库扩展!本文教你三步添加新数据库:初始化SQL适配、MyBatis配置新增databaseId、Dify智能体建表。轻松实现MySQL、PostgreSQL、达梦等多库兼容,结合AI快速生成建表语句,提升开发效率。
297 0
【RuoYi-SpringBoot3-Pro】:想要什么数据库都有!三步教你轻松添加新支持
|
存储 Java 数据库
Spring Boot 优雅实现多租户架构
本文详细介绍如何使用Spring Boot和Spring Cloud实现多租户架构。多租户架构允许多个租户共用一个应用,各自拥有独立资源和数据。其优势包括满足个性化需求、降低成本、复用代码以及增强可扩展性。文中探讨了架构选型、数据库设计、应用部署及租户管理等内容,并提供了具体实现步骤和技术细节。适用于SaaS应用和多租户云服务等场景。
1201 120
|
SQL 开发框架 前端开发
SpringCloud微服务实战——搭建企业级开发框架(二十二):基于MybatisPlus插件TenantLineInnerInterceptor实现多租户功能
多租户技术的基本概念:   多租户技术(英语:multi-tenancy technology)或称多重租赁技术,是一种软件架构技术,它是在探讨与实现如何于多用户的环境下共用相同的系统或程序组件,并且仍可确保各用户间数据的隔离性。   在云计算的加持之下,多租户技术被广为运用于开发云各式服务,不论是IaaS,PaaS还是SaaS,都可以看到多租户技术的影子。
1613 54