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

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

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

RuoYi-SpringBoot3-Pro[1]直接集成了 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. 1. 从当前登录用户信息里取出tenantId

  2. 2. 判断当前表需不需要隔离(看是不是在ignoreTables里)。

  3. 3. 如果需要隔离,就在你的 SQL 后面自动追加AND tenant_id = 123

注意事项

  • • 多租户不等于权限过滤,租户之间是完全隔离的。

  • • 由于多租户ID 是从当前登录用户信息获取,所以像定时任务的处理,需要自行根据业务逻辑判断。

  • • 启用多租户后,所有执行的 method 的 SQL 都会进行处理。

  • • 自定义的 SQL 请按规范书写,特别是涉及到多个表的每个表都要给别名,特别是 inner join 的要写标准的 inner join。

引用链接

[1]RuoYi-SpringBoot3-Pro:https://github.com/undsky/RuoYi-SpringBoot3-Pro

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/1160589.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

提示工程架构师经验:如何用Prompt解决客服复杂问题?

提示工程架构师经验:如何用Prompt解决客服复杂问题? 一、引言:客服AI的「尴尬时刻」,你遇到过吗? 上周晚饭后,我帮妈妈处理网购纠纷——她买的养生壶收到时底座裂了,联系客服AI得到回复&#xf…

对象库未注册-VB6企业版控件加载不了MSCOMCTL.ocx

关于WIN7下VB6中MicrosoftWindowsCommonControls6.0(SP6)加载提示“对象库未注册”的一种解决办法​​我之前在另外一台电脑上加上了进度条控件,使用正常;换了一台电脑之后,去“部件”中加入Microsoft Windows Common Controls 6.0 (SP6)时&a…

动漫生成服务SLA保障:AnimeGANv2高可用部署架构

动漫生成服务SLA保障:AnimeGANv2高可用部署架构 1. 引言 1.1 业务场景描述 随着AI图像风格迁移技术的普及,用户对“照片转动漫”类应用的需求迅速增长。尤其在社交娱乐、头像生成、内容创作等领域,基于AnimeGANv2的二次元转换服务因其画风…

go语言对phone脱敏显示

在Go语言中实现手机号脱敏显示主要有以下几种方式,从简单到完整逐步推荐: 一、基础实现(字符串切片) 最常用且高效的方式是直接使用字符串切片操作,保留前3位和后4位,中间用*替换: go 复制 …

通义千问2.5-7B-Instruct优化技巧:RTX 3060流畅运行指南

通义千问2.5-7B-Instruct优化技巧:RTX 3060流畅运行指南 1. 引言:为何在RTX 3060上部署Qwen2.5-7B-Instruct成为可能 随着大模型技术的快速演进,70亿参数级别的语言模型已逐步从“云端专属”走向本地化部署。通义千问2.5-7B-Instruct作为阿…

农业机械收割机拖拉机数据集6340张VOC+YOLO格式

农业机械收割机拖拉机数据集6340张VOCYOLO格式数据集格式:VOC格式YOLO格式压缩包内含:3个文件夹,分别存储图片、xml、txt文件JPEGImages文件夹中jpg图片总计:6340Annotations文件夹中xml文件总计:6340labels文件夹中tx…

AnimeGANv2如何提高边缘清晰度?后处理滤波技术实战

AnimeGANv2如何提高边缘清晰度?后处理滤波技术实战 1. 背景与问题分析 在基于AnimeGANv2的图像风格迁移应用中,尽管模型本身具备较强的动漫化能力,尤其在人脸保留和色彩渲染方面表现优异,但其生成结果常存在边缘模糊、轮廓失真、…

开源模型新选择:AnimeGANv2宫崎骏风格迁移实战指南

开源模型新选择:AnimeGANv2宫崎骏风格迁移实战指南 1. 引言 随着深度学习在图像生成领域的持续突破,风格迁移技术已从实验室走向大众应用。其中,AnimeGANv2 作为轻量级、高效率的动漫风格迁移模型,凭借其出色的画质表现和极低的…

AnimeGANv2优化指南:处理高分辨率图片的配置建议

AnimeGANv2优化指南:处理高分辨率图片的配置建议 1. 背景与挑战:高分辨率输入下的性能瓶颈 随着用户对图像质量要求的不断提升,将高清照片(如1080p、4K)转换为二次元风格的需求日益增长。AnimeGANv2 以其轻量级结构和…

keil5安装包下载通俗解释:新手也能轻松掌握

从零开始搭建嵌入式开发环境:Keil5安装与配置实战指南 你是不是也曾在搜索引擎里输入“ keil5安装包下载 ”,却被五花八门的链接、版本号和破解教程搞得一头雾水? 别担心,这不只是你在经历。几乎每一个刚接触STM32或ARM开发的…

车辆及人数据集(汽车公交车收割机拖拉机卡车人)12819张

车辆及人数据集(汽车公交车收割机拖拉机卡车人)12819张数据集格式:VOC格式YOLO格式压缩包内含:3个文件夹,分别存储图片、xml、txt文件JPEGImages文件夹中jpg图片总计:12819Annotations文件夹中xml文件总计&…

Qt 线程管理:从 QThread 到 QThreadPool

在 Qt 中,多线程开发主要围绕 QThread(底层控制)和 QThreadPool(效率复用)展开。QThread:手动管理线程生命周期,适用于常驻后台任务。QThreadPool:自动管理线程池,适用于…

AnimeGANv2从零开始:构建二次元转换器完整流程

AnimeGANv2从零开始:构建二次元转换器完整流程 1. 引言 1.1 学习目标 本文将带你从零开始,完整实现一个基于 AnimeGANv2 的照片转二次元动漫风格系统。你将掌握: AnimeGANv2 的核心原理与轻量化设计优势如何部署并运行一个支持人脸优化的…

物理约束机器学习赋能科学计算

物理约束机器学习赋能科学计算 研究人员从有限体积法中汲取灵感,并调整神经算子,以在物理系统的深度学习模型中强制执行守恒定律和边界条件。 深度学习方法在科学计算领域也展现出前景,可用于预测偏微分方程的解。这些方程通常数值求解成本高…

彻底解析Java访问修饰符:public、private、protected及默认的区别

文章目录彻底解析 Java 访问修饰符:public、private、protected 及默认的区别?什么是访问修饰符?第一部分:public(公共的)public 的作用范围public 的应用场景示例代码第二部分:private&#xf…

AnimeGANv2代码实例:Python调用模型避坑指南

AnimeGANv2代码实例:Python调用模型避坑指南 1. 引言 1.1 项目背景与技术价值 随着深度学习在图像生成领域的快速发展,风格迁移(Style Transfer)技术已从早期的神经网络艺术化处理演进到如今高度精细化的动漫风格转换。其中&am…

一键部署通义千问2.5-7B-Instruct,AI应用开发从未如此简单

一键部署通义千问2.5-7B-Instruct,AI应用开发从未如此简单 1. 引言:为什么选择通义千问2.5-7B-Instruct? 随着大模型技术的快速演进,开发者对高效、轻量且可商用的本地化推理模型需求日益增长。在这一背景下,通义千问…

手把手教程:用通义千问2.5-7B和vLLM实现代码补全功能

手把手教程:用通义千问2.5-7B和vLLM实现代码补全功能 1. 学习目标与前置知识 本文将带领读者从零开始,使用 通义千问2.5-7B-Instruct 模型结合 vLLM 推理框架,搭建一个高效的本地化代码补全系统。通过本教程,您将掌握&#xff1…

Windows 10/11 优化大师 Windows Manager

一、前言:为什么 Windows 10/11 越用越卡? 相信很多朋友都有这样的体验: 新装的 Windows 10 / Windows 11 用着很流畅用了一段时间后: 开机变慢系统反应迟钝后台服务越来越多磁盘空间被莫名其妙占满 即便你不安装乱七八糟的软…

hal_uart_transmit支持多协议切换的控制系统设计方案

基于hal_uart_transmit的多协议动态切换系统设计:从理论到实战在嵌入式控制系统中,我们常常面临一个看似简单却极具挑战的现实问题:如何让一块MCU通过同一个UART接口,与使用不同通信协议的多个外设稳定“对话”?比如&a…