外观
参数配置
概述
参数配置(infra_config)是系统级的「键值型」配置中心,用于把分散在代码里的开关与阈值收敛到数据库,便于运维人员在不发版的情况下动态调整。
它同时服务于两类场景:
- 业务配置:前端页面展示、业务模块读取的普通参数(如初始密码、监控地址)。
- 运行时配置:被后端中间件、调度器高频读取的开关(如演示模式、IP 黑白名单),这类参数修改后需要尽快生效。

核心概念
参数由以下关键属性构成:
- 参数分组(category):对参数做逻辑归类,例如
用户管理,仅用于展示与检索。 - 参数键名(config_key):全局唯一、用于程序读取的键,命名约束为「小写字母开头,仅含小写字母、数字、
_.-」。键名一旦创建不可修改。 - 参数名称(name):面向用户的中文名称。
- 参数键值(value):实际配置内容,字符串类型,最长 500 字符,前后空格会自动去除。
- 参数类型(type):
1系统内置、2自定义。系统内置参数通常由初始化脚本写入,不允许删除。 - 是否可见(visible):不可见参数在前端列表隐藏,且不会被中间件当作「已启用」(见下文缓存机制)。
缓存与生效机制
参数配置采用「数据库 + Redis + 内存」三级缓存,以兼顾一致性与性能。
要点:
- 启动时由
ParamsService.init_cache把全量参数同步进 Redis(infra:config:{tenant_id}:{config_key}),中间件无数据时使用默认值。 - 创建、修改、删除参数都会同步维护 Redis 缓存;修改与删除还会主动失效对应租户的中间件内存缓存(
_invalidate_mid_config_cache),避免最长 60 秒的脏读。 - 中间件侧通过
get_system_config_for_middleware读取,带有 60 秒内存缓存并按租户隔离,因此对高频请求几乎零开销。 - 不可见(
visible != 1)的参数在中间件读取时视为「未启用」,自动回退默认值。
内置系统参数
以下键名被后端中间件 / 调度器直接消费(见 MIDDLEWARE_CONFIG_KEYS),配置它们即可改变系统运行时行为:
| 配置键 | 语义 | 默认值 | 说明 |
|---|---|---|---|
| demo_enable | 演示模式开关 | false | 开启后非 GET 请求(且不在白名单内)会被拦截 |
| ip_white_list | IP 白名单 | [] | 演示模式下放行这些 IP 的写操作 |
| ip_black_list | IP 黑名单 | [] | 命中的客户端直接被拒绝访问 |
| white_api_list_path | API 白名单路径 | [] | 演示模式下放行的接口路径前缀 |
| operation_log_retention_days | 操作日志保留天数 | 90 | 日志清理任务的保留窗口 |
此外,初始化 SQL 还会写入一些业务参数,例如 system.user.init-password(账号初始密码)、system.user.register-enabled(注册开关),这些都可在页面上直接查看与调整。
提示:修改上述内置键的键名是无效的——键名创建后不可变更,更新接口会校验
config_key保持一致。
后端接口
所有接口位于 /infra/config,统一响应包裹于 ResponseSchema,需要对应权限码:
| 接口 | 说明 | 权限 |
|---|---|---|
GET /page | 分页查询参数列表 | infra:config:query |
GET /get | 参数详情 | infra:config:query |
GET /get-value-by-key | 按键名取参数值 | infra:config:query |
GET /key/{config_key} | 按键名取参数详情 | infra:config:query |
POST /create | 新建参数 | infra:config:create |
PUT /update | 修改参数 | infra:config:update |
DELETE /delete | 删除参数 | infra:config:delete |
DELETE /delete-list | 批量删除 | infra:config:delete |
GET /export-excel | 导出 Excel | infra:config:export |
GET /info | 获取初始化缓存参数 | 无 |
约束逻辑(集中在 ParamsService):
- 创建时校验
config_key唯一,重复则报错。 - 更新时不允许修改键名;成功后同步 Redis 并失效中间件缓存。
- 删除时拒绝删除系统内置(
type=1)或不可见(visible=false)的参数,避免破坏运行时依赖。
前端使用
参数配置页面位于 apps/web-ele/src/views/infra/config,采用 Vben 的 useVbenVxeGrid + 弹窗表单模式。
- 列表字段由
data.ts的useGridColumns定义,搜索表单由useGridFormSchema定义,类型与可见性通过字典INFRA_CONFIG_TYPE、INFRA_BOOLEAN_STRING渲染。 - 表单
form.vue通过getConfig回显数据,提交时按是否有id自动选择新建或更新。 - 所有写操作按钮受权限码(如
infra:config:create)控制,无权限时不展示。
典型调用示例:
ts
import { getConfigKey } from '#/api/infra/config';
// 在业务代码中按需读取某个参数值
const value = await getConfigKey('system.user.register-enabled');使用建议与注意事项
- 给程序读取的参数务必使用稳定、语义清晰的
config_key,创建后切勿尝试改名。 - 仅把真正需要动态调节的项做成参数配置,避免把高频变化的业务数据误用此表。
- 修改「内置系统参数」后,最迟约 60 秒(或下次请求)内即对中间件生效;由于会主动失效缓存,多数情况下是即时生效。
- 系统内置参数不要删除;若只是希望临时停用,可将「是否可见」置为否,中间件会按默认值处理。
- 参数键值统一为字符串,消费方(如中间件)会按语义解析:布尔类兼容
true/1/yes/on,数组类兼容 JSON 字符串。