最好用的多租户插件druid-multi-tenant-starter
2024年7月16日至今druid-multi-tenant-starter插件的已发布两年多。这个新工具的推出标志着一个高效、简便的SaaS多租户管理解决方案的诞生,为开发者提供了全新的便捷体验。
什么是druid-multi-tenant-starter?
druid-multi-tenant-starter是一个基于MyBatis拦截器和 alibaba Druid SQL解析器的多租户插件。它旨在简化SaaS(软件即服务)平台中的多租户管理,提供开箱即用,配置简单易用的解决方案,使开发者能够轻松实现多租户数据隔离与管理。
主要特点与优势
-
无缝集成: 作为一个开箱即用的插件,druid-multi-tenant-starter能够与现有的MyBatis框架完美集成,避免了繁琐的配置和代码修改。只需少量的配置即可启用多租户功能,极大地提升了开发效率。
-
强大的SQL解析: 利用阿里巴巴Druid的强大SQL解析能力,druid-multi-tenant-starter能够精确地解析和处理SQL语句,确保多租户环境中的数据隔离和安全性。无论是查询、更新还是删除操作,都能得到有效的管理和控制。
-
灵活的租户管理: 插件提供了多种灵活的租户管理策略,允许开发者根据实际需求定义和调整租户识别方式。这使得它能够适应不同的应用场景,提供个性化的解决方案。
-
性能优化: druid-multi-tenant-starter是基于alibaba Druid SQL解析库对SQL语句进行解析,比某租户插件是基于JSQLParser进行解析SQL语句,所以性能方便比某租户插件更强
使用场景
-
SaaS应用平台: druid-multi-tenant-starter特别适用于需要支持多个租户的SaaS平台,它能够保证不同租户的数据安全和隔离,防止数据交叉和泄露。
-
企业级系统: 对于需要在同一系统中管理多个业务单元或子公司数据的企业,druid-multi-tenant-starter提供了理想的解决方案,简化了数据管理和维护工作。
-
数据共享平台: 在需要进行多方数据共享而又需保证数据隔离的场景下,druid-multi-tenant-starter能够有效支持不同数据源的管理需求
支持忽略tenantId策略
- 支持原SQL语句中已有tenantId字段条件跳过
- 支持忽略指定表名添加tenantId字段条件
- 支持忽略指定Mapper接口SQL语句添加tenantId字段条件
- 支持指定
表名
忽略SQL语句添加tenantId字段条件 - 支持指定
别名
忽略SQL语句添加tenantId字段条件 - 支持租户ID从Mapper接口方法参数传入
快速开始
- 在已经集成
Mybatis
项目中引入以下依赖
<dependency>
<groupId>io.github.osinn</groupId>
<artifactId>druid-multi-tenant-starter</artifactId>
<version>1.4.7</version>
</dependency>
配置
--基础配置
mybatis:
tenant:
config:
# 是否启用多租户插件
enable: true
# 数据库中租户ID的列名
tenant-id-column: tenant_id
实现提供获取多租户值接口
- 需要实现ITenantService接口提供获取多租户ID值
/**
* 演示:提供多租户ID服务接口
*
* @author wency_cai
*/
@Service
public class TenantServiceImpl implements ITenantService<Integer>{
@Override
public List<Integer> getTenantIds() {
// 查询系统多租户id,如果有多个返回多个值即可
int tenantId = 1;
return Lists.newArrayList(tenantId);
}
}
- 到此druid-multi-tenant-starter租户插件集成完成
- 项目中写的SQL语句无需关系租户ID字段,只需要像平时写SQL语句一样正常写SQL语句即可,底层会串改SQL语句生成新的SQL语句执行
结语
druid-multi-tenant-starter的发布至今已在生产环境正常运行两年多。它不仅简化了多租户环境中的开发工作,还提升了系统的性能和安全性。我们期待这款插件能够帮助更多的开发者和企业高效管理他们的多租户系统,实现业务的快速发展和成功。
项目地址:https://github.com/osinn/druid-multi-tenant-starter