Skip to content

关闭/移除多租户

最后更新: 10 天前
实践版本: v4.0.0

ContiNew Admin 从 v4.0.0 版本开始正式集成了多租户能力,这是社区从 1.x 版本起就持续期待的功能。考虑到维护成本和开发精力,我们最终决定放弃多租户与无租户分支并行的方案,改为默认提供多租户能力。

为了满足部分不需要多租户功能的用户需求,本文档将详细介绍如何关闭或移除多租户能力,确保所有用户都能顺利升级和使用最新版本。

注意事项

如果你体验了多租户功能,即初始化过租户模块的 SQL 脚本(默认项目运行时会执行 plugin_tenant.sql 脚本),请务必在关闭或移除租户功能之前,将数据库进行重置。否则在没有租户隔离的情况下,操作数据会出现错误。

问题一: 租户模块的 SQL 脚本初始化会为需要租户隔离的业务表增加 tenant_id 字段,并添加唯一校验。如果不重置数据库表,唯一校验将失效。
问题二: 假设你创建过一个租户管理员 admin,在没有租户隔离的情况下,查询会返回两条admin数据,导致查询结果出错。

快速关闭租户功能(推荐)

如果您只是暂时不需要使用多租户功能,推荐通过简单配置来关闭它,而不是完全移除相关代码。

步骤 1:修改配置文件

application.yml 中,将 continew-starter.tenant.enabled 设置为 false

continew-server/application.yml
yaml
# 租户配置
continew-starter.tenant:
  enabled: false

步骤 2:修改数据库变更日志

db.changelog 目录下的 db.changelog-master.yaml 文件中,注释掉与 plugin_tenant.sql 相关的脚本引用。

步骤 3:前端自动适配

前端会通过后端接口 /system/common/dict/option/tenant 自动获取租户启用状态,无需手动修改前端代码。

通过以上三步简单配置,即可完全关闭多租户功能,系统将以无租户模式运行。

完全移除租户相关代码

如果您确定永远不会使用多租户功能,可以选择完全移除相关代码。

步骤 1:移除租户依赖

continew-common/pom.xml 文件中移除租户扩展模块依赖:

continew-common/pom.xml
xml
<!-- 移除 ContiNew Starter 扩展模块 - 租户 -->
<!-- <dependency>
    <groupId>top.continew.starter</groupId>
    <artifactId>continew-starter-extension-tenant-mp</artifactId>
</dependency> -->

步骤 2:移除租户配置

application.yml 中移除所有租户相关配置:

continew-server/application.yml
yaml
# 移除租户配置
# continew-starter.tenant:
#   ...

步骤 3:移除租户数据库脚本

删除 db.changelog 目录下的 plugin_tenant.sql 脚本文件,并从 db.changelog-master.yaml 中移除对该脚本的引用。

步骤 4:移除租户模块

  1. continew-plugin 中移除 continew-plugin-tenant 模块
  2. continew-server 的依赖配置中移除 continew-plugin-tenant
  3. continew-common/api 包中删除所有与租户相关的 API 定义
  4. 编译项目,检查并修复可能出现的其他依赖错误
  5. 移除前端项目中与租户相关的代码(如 useTenant 等)

注意事项

  1. 我们已尽可能将租户相关代码封装在 continew-plugin-tenant 模块中,并通过 TenantContextHolder.isTenantEnabled() 方法对所有相关功能进行了条件判断(如有遗漏,欢迎提交 PR)。

  2. 如需暂时禁用多租户功能,推荐使用「快速关闭」方案,这样可以保留未来启用多租户的可能性。

  3. 完全移除租户代码前,请确保您已充分了解系统架构,避免误删关键代码导致系统异常。

  4. 移除或修改代码后,请务必进行全面测试,确保系统功能正常。