做 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,它会:
tenantId。
ignoreTables 里)。
AND tenant_id = 123。
[1]
RuoYi-SpringBoot3-Pro:
https://github.com/undsky/RuoYi-SpringBoot3-Pro