租户配置
作者:唐亚峰 | battcn
字数统计:476 字
TIP
支持市面上常见的租户隔离方案 字段隔离
、Schema
、动态数据源
及组合策略。
添加依赖
在 pom.xml
中添加 SDK 的依赖包,可以参考项目中的案例
xml
<dependency>
<groupId>com.wemirr.framework</groupId>
<artifactId>db-spring-boot-starter</artifactId>
<version>${lastVersion}</version>
</dependency>
租户策略
/ | 字段隔离 | 数据源隔离 | 是否支持 | 是否开源 |
---|---|---|---|---|
简易 | 简单 | 复杂 | 支持 | 开源 |
事务 | 简单 | 复杂 | 支持 | 开源 |
规模 | 租户年订单量低于200W | 租户年订单量高于200W | 支持 | 开源 |
优点 | 方便统计数据和排查问题 | 平台想对所有租户数据做统计相对麻烦 | 具体业务具体实现 | 开源 |
字段隔离
字段隔离:在需要对租户数据隔离的SQL添加租户字段进行数据过滤
yaml
# 表示字段隔离
extend.mybatis-plus.multi-tenant.type=column
# 表示需要进行租户数据隔离的表名(逗号分隔)
extend.mybatis-plus.multi-tenant.include-tables=t_user,t_file
# 字段隔离需要关掉动态AOP
spring.datasource.dynamic.aop.enabled=false
动态数据源
数据源隔离:没个租户独立数据源,使用 Spring Cloud Bus
动态切换分配数据源,项目初始化也会加载所有数据源
yaml
# 表示数据源隔离
extend.mybatis-plus.multi-tenant.type=datasource
# 非 authority 模块都配置成 feign 即可
extend.mybatis-plus.multi-tenant.strategy=feign
默认数据源配置
js
spring.datasource.dynamic.primary=master
spring.datasource.dynamic.strict=true
spring.datasource.dynamic.datasource.master.pool-name=HikariDataSourcePool
spring.datasource.dynamic.datasource.master.driver-class-name=com.mysql.cj.jdbc.Driver
spring.datasource.dynamic.datasource.master.url=jdbc:mysql://localhost:3306/wemirr-platform?useUnicode=true&characterEncoding=utf8&allowMultiQueries=true&serverTimezone=GMT%2B8&useSSL=false&allowPublicKeyRetrieval=true
spring.datasource.dynamic.datasource.master.type=com.zaxxer.hikari.HikariDataSource
spring.datasource.dynamic.datasource.master.username=root
spring.datasource.dynamic.datasource.master.password=123456
spring.datasource.dynamic.hikari.max-pool-size=15
spring.datasource.dynamic.hikari.max-lifetime=1800000
spring.datasource.dynamic.hikari.connection-timeout=30000
spring.datasource.dynamic.hikari.min-idle=5
spring.datasource.dynamic.hikari.is-auto-commit=true
使用方式
在 Mapper/Service/Controller 处添加 @TenantDS
注解,即可根据规则动态切换数据源了
自定义规则
如果你觉得默认方案不符合业务场景要求,可以自己修改 TenantDynamicDataSourceProcess
与 TenantDynamicDataSourceEventBusAutoConfiguration
或者联系作者进行兼容性处理(非通用场景不考虑)