多租户
so-fast框架支持平台级的多租户功能(schema隔离或数据库隔离)
组件介绍:
框架基于dynamic-datasource-spring-boot-starter组件来实现的多租户的动态数据源切换功能。目前支持schema级别和数据库级别的数据隔离。
dynamic-datasource-spring-boot-starter 是一个基于springboot的快速集成多数据源的启动器。
源码地址-github: https://github.com/baomidou/dynamic-datasource-spring-boot-starter
实现原理:
在租户创建时根据模板生成对应的数据库,表和初始数据,并以SoFast_tenant_DS:租户ID:服务名为KEY将相应的数据源信息缓存在redis中。
当租户请求对应的服务时,根据请求头里的租户ID获取对应的数据源信息,创建或获取数据源,并将其设定其为当前的数据源。
使用方式:
- 自己工程的POM文件里导入以下配置
<dependency>
<groupId>com.sofast.cloud</groupId>
<artifactId>so-fast-ds-tenant-starter</artifactId>
</dependency>
so-fast-tenant是租户管理工程,其中bootstrap.yml里需要按照如下图的格式来配置多租户的服务
其中serviceName是服务名称,schemaName是默认的该服务建库名称,目前多租户服务只支持一个服务一个库。
template下存放涉及租户服务对应的建表SQL文,文件名以服务名称来命名。
so-fast-tenant工程只提供了基础的租户管理内容,需要业务和开发人员根据实际需求将企业和租户绑定。
实现原理是实现一个fliter来拦截web请求,根据请求头里的tenantId来切换租户的数据源,保证同一个服务支持多数据库的租户模式。所以需要进行租户管理的业务请求头都需要一个tenantId的参数。
页面功能介绍:
租户管理页面,首先添加租户,成功后在对租户配置数据源
列表功能页
- 模糊搜索租户数据
- 添加租户
- 租户状态修改
- 列表中操作事情
- 查看
- 配置数据源
- 修改租户
- 删除租户
模态事件
- 新增租户
- 状态默认为禁用
- 必填项为租户ID和租户名称
- 规则
- 租户ID: 不能包含汉字,只能是字母、数字或-组成
配置数据源
测试
- 单独测试
当数据为默认数据源时则可以测试按钮测试, 测试成功后不能再次进行修改 - 批量测试
选择每个服务名称前checkbox后,测试选中数据是否成功!成功后不能再此进行修改
- 单独测试
删除
根据租户ID删除当前数据源数据,删除后重新获取数据源列表数据,只有当是租户ID下的数据源数据才会显示此功能按钮- 建库 当测试完成后的数据源数才可以建库,没有完成测试,先处理完成所选择的数据源完成测试后再进行建库事件处理
- 删除租户 删除租户: 根据当前行ID
注意事项:
- 在创建租户的数据源时数据源schema的内容开默认填充的,可以修改。如果不修改会创建默认的库名:默认schema+“_”+租户ID。
- 如果建库的用户名和密码不填写,会默认使用业务的用户名密码来建库,请注意给予相应的数据库权限,以防止建库失败。
- 如果有不需要进行租户数据源切换的业务,请收集对应的请求路径。在自己的工程里实现SecurityConstants.java接口重新定义STATIC_RESOURCE的路径内容。
- 如果提示获取"当前租户的数据源情报无法获取,请联系管理员!"的消息,可以试一下数据源页面的刷新按钮,其作用是将该租户的数据源信息重新导入到redis缓存中。