本系统能通过配置文件(mysql.yml),切换租户模式,通过修改该配置后,业务代码基本不用做任何改动,即可同时满足4种模式。
(注意:业务代码是指,基于本系统新增的业务功能代码,比如,本系统的业务代码:权限服务、消息、文件、订单服务。)
但是在数据源配置(com.github.zuihou.authority.config.datasource包下面的配置)和租户模块(zuihou-tenant-xxx)相关代码做了一些手脚,使得业务代码能完美兼容4种模式。
同时数据库方面需要根据自己的情况做一些调整。
zuihou:
database:
multiTenantType:
有4个选项:
1.NONE:非租户模式
2.COLUMN:字段模式
3.SCHEMA:独立schema模式
4.DATASOURCE:独立数据源模式
4个sql脚本的区别:
- zuihou_zipkin.sql: zipkin需要使用的数据库,无论使用那种模式,请独立创建 zuihou_zipkin 数据库,并导入 zuihou_zipkin.sql
- zuihou_defaults_yj.sql:默认库,用于存放全局表,如租户信息、定时信息等
- zuihou_base_yj_0000.sql:租户库,用于存放内置租户:0000 的业务表。(跟 zuihou_column.sql 的区别在于没有 tenant_code 字段 )
- zuihou_column.sql:租户库,用于存放所有租户的业务表。(跟 zuihou_base_yj_0000.sql 的区别在于每个表都有 tenant_code 字段 )
下面介绍4种模式如何创建数据库:(zuihou_zipkin.sql 4种模式都要单独导入 zuihou_zipin 库!)
NONE
- 创建数据库: zuihou_none
- 向 zuihou_none 库导入 zuihou_defaults_yj.sql
- 向 zuihou_none 库导入 zuihou_base_yj_0000.sql
COLUMN
- 创建数据库: zuihou_column_all
- 向 zuihou_column_all 库导入 zuihou_defaults_yj.sql
- 向 zuihou_column_all 库导入 zuihou_column.sql
SCHEMA
- 创建数据库: zuihou_defaults_yj 和 zuihou_base_yj_0000
- 向 zuihou_defaults_yj 库导入 zuihou_defaults_yj.sql
- 向 zuihou_base_yj_0000 库导入 zuihou_base_yj_0000.sql
DATASOURCE
- 创建数据库: zuihou_defaults_yj 和 zuihou_base_yj_0000
- 向 zuihou_defaults_yj 库导入 zuihou_defaults_yj.sql
- 向 zuihou_base_yj_0000 库导入 zuihou_base_yj_0000.sql
题外话:
问: docs/sql/*.sql
和 zuihou-authority/zuihou-authority-server/sql/*.sql
有什么区别?
答:docs/sql/*.sql
存放的是系统内置的数据库脚本,脚本里面出除了表结构
和一些必要数据
,还维护了一些丰富的业务数据
,主要用于启动项目。
而,zuihou-authority/zuihou-authority-server/sql/*.sql
里面的脚本用于项目启动后,配置 SCHEMA
和 DATASOURCE
模式,新建租户时使用
zuihou_base.sql
存放的是 新租户的 表结构
、zuihou_base_data.sql
存放的是:新租户的 必要数据
, 没有docs/sql/*.sql
里面的业务数据
!!!