Soul Admin 数据库设计 (插件部分)
在当前版本的官方文档中学习到, Soul 网关的插件信息采用数据库来存储插件相关的信息, 相关的数据库模型有:
| 模型名称 | 模型描述 |
|---|---|
| Plugin | 插件 |
| Selector | 选择器 |
| SelectorCondition | 选择器匹配条件 |
| Rule | 规则 |
| RuleCondition | 规则匹配条件 |
| PluginHandle | 插件处理参数 |
数据库模型图

数据库表字段说明
plugin表字段说明
| 表字段名 | 字段描述 |
|---|---|
| id | ID 主键 |
| name | 插件名称 |
| config | 插件配置 |
| role | 插件的类型, 0: 系统插件, 1: 自定义插件 |
| enabled | 启用状态, 0: 禁用, 1: 启用 |
| date_created | 创建时间 |
| date_updated | 更新时间 |
plugin_handle表字段说明
| 表字段名 | 字段描述 |
|---|---|
| id | ID 主键 |
| plugin_id | 插件 ID |
| field | 字段名称 |
| label | 标签 |
| data_type | 数据类型, 1: 数字, 2: 字符串 |
| type | 字段所属类型, 1: 选择器, 2: 规则, 3: 插件 |
| sort | 排序 |
| ext_obj | 扩展配置信息, json 格式字符串, 如: {“required”: true, “defaultValue”: “default”} |
| date_created | 创建时间 |
| date_updated | 更新时间 |
selector表字段说明
| 表字段名 | 字段描述 |
|---|---|
| id | ID 主键 |
| plugin_id | 插件 ID |
| name | 选择器名称 |
| match_mode | 匹配类型 |
| type | 类型 |
| sort | 排序 |
| handle | 插件处理信息 |
| enabled | 是否开启 |
| loged | 是否打印日志 |
| continued | 是否继续后序选择器 |
| date_created | 创建时间 |
| date_updated | 更新时间 |
selector_condition表字段说明
| 表字段名 | 字段描述 |
|---|---|
| id | ID 主键 |
| selector_id | 选择器 ID |
| param_type | 条件参数类型 |
| operator | 参数匹配操作符 |
| param_name | 条件参数名称 |
| param_value | 条件参数值 |
| date_created | 创建时间 |
| date_updated | 更新时间 |
rule表字段说明
| 表字段名 | 字段描述 |
|---|---|
| id | ID 主键 |
| selector_id | 选择器 ID |
| match_mode | 匹配类型 |
| name | 规则名称 |
| enabled | 是否启用 |
| loged | 是否打印日志 |
| sort | 排序 |
| handle | 插件处理信息 |
| date_created | 创建时间 |
| date_updated | 更新时间 |
rule_condition表字段说明
| 表字段名 | 字段描述 |
|---|---|
| id | ID 主键 |
| rule_id | 规则 ID |
| param_type | 规则参数类型 |
| operator | 规则匹配操作符 |
| param_name | 参数名称 |
| param_value | 参数值 |
| date_created | 创建时间 |
| date_updated | 更新时间 |
插件数据关联 (Soul Admin 侧维护)
启动 Soul Admin 时, 使用 MySQL 数据库存储插件信息, 在启动完成之后, 查看数据库 soul 的 plugin 和 plugin_handle, plugin 表中, 以 role 字段区分一个插件是系统插件, 还是自定义插件 (对 PluginRole 的定义可以查看 soul
工程中 soul-common 模块中的类 org.dromara.soul.common.enums.PluginRoleEnum)。
Soul Admin 启动时, 会默认初始化一部分插件信息, 这部分插件写入了表 plugin 和 plugin_handle 中。
数据库设计的理解 (插件部分)
- 每个插件信息 (Plugin) 包含多个插件处理参数信息 (PluginHandle)
plugin_handle 表中的数据在 Soul 网关管理 > 系统管理 > 插件处理管理 展示, 可以在页面上添加数据。插件处理参数数据中有一个字段 type 会区分字段所属插件模型类型: 选择器, 规则或者插件。
因为插件处理参数最终会归属于某个插件,对应在不同的应用模型类型,最终信息的落地形式为:
| 所属插件模型类型 | 表现形式 |
|---|---|
| 插件 | 在插件管理页面中维护插件信息中会有对应的插件处理信息, 维护后插件处理信息会存储到数据库 plugin 表 config 字段 |
| 选择器 | 在插件列表中选择维护了插件处理信息的插件后, 添加选择器会要求维护插件处理信息, 维护后插件处理信息会存储到数据库 selector 表 handle 字段 |
| 规则 | 在插件列表中选择维护了插件处理信息的插件后, 添加规则会要求维护插件处理信息, 维护后插件处理信息会存储到数据库 rule 表 handle 字段 |
一个选择器 (Selector) 对应多个匹配条件 (SelectorCondition),一个选择器 (Selector) 也可对应多个匹配规则 (Rule),一个规则 (Rule) 对应多个匹配条件 (RuleCondition)。
插件, 选择器, 规则都是描述网关处理请求行为的数据。
总结
今天阅读了 Soul Admin 中插件部分的数据库相关的设计文档,数据库实体定义的源码,插件部分信息的维护。今天的学习路线为:
阅读文档 -> 整理数据库模型设计 -> 在 Soul Admin 使用相关的功能 -> 阅读源码 -> 理解设计
通过今天的学习, 读懂了 Soul 网关中插件部分的设计,后面会继续对网关插件如何在网关的请求路由时的工作原理做出相应的剖析。