Skip to content

租户配置

作者:唐亚峰 | 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 注解,即可根据规则动态切换数据源了

自定义规则

如果你觉得默认方案不符合业务场景要求,可以自己修改 TenantDynamicDataSourceProcessTenantDynamicDataSourceEventBusAutoConfiguration 或者联系作者进行兼容性处理(非通用场景不考虑