跳到主要内容

配置管理相关表

目录

  1. 简介
  2. 项目结构
  3. 核心组件
  4. 架构总览
  5. 详细组件分析
  6. 依赖关系分析
  7. 性能考虑
  8. 故障排查指南
  9. 结论
  10. 附录

简介

本文件聚焦于配置管理模块的核心表结构与关键流程,围绕“参数配置表(infra_config)”展开,系统化说明其字段定义、数据类型、约束条件与业务含义;并结合后端控制器、服务层、数据对象与映射器,阐述配置的分类管理、动态配置更新、可见性控制与生效机制。同时提供表结构图、字段说明、典型数据示例与常见操作模式,帮助读者快速理解与落地配置管理能力。

项目结构

配置管理相关的核心代码与数据库脚本分布如下:

  • 数据库脚本:覆盖 MySQL、Oracle、DM 等多数据库方言的 infra_config 表结构与初始化数据
  • 后端模块:infra 模块的 controller、service、mapper、dataobject、api 等层次清晰的分层设计
  • 测试用例:覆盖配置的增删改查、键唯一性校验、可见性限制等关键行为

Mermaid Diagram Code:

graph TB
subgraph "数据库脚本"
M["MySQL 脚本<br/>infra_config 表结构"]
O["Oracle 脚本<br/>infra_config 表结构"]
D["DM 脚本<br/>infra_config 表结构"]
end
subgraph "后端模块"
C["ConfigController<br/>REST 控制器"]
S["ConfigServiceImpl<br/>业务服务"]
MPR["ConfigMapper<br/>MyBatis 映射"]
DO["ConfigDO<br/>数据对象"]
API["ConfigApi<br/>RPC 接口"]
end
M --> DO
O --> DO
D --> DO
C --> S
S --> MPR
MPR --> DO
API --> S

图表来源

章节来源

核心组件

  • 参数配置表(infra_config)
    • 作用:统一存储系统与业务的配置项,支持按分类、类型、可见性进行管理
    • 关键特性:键唯一、可见性控制、软删除、时间戳与操作人字段
  • 数据对象(ConfigDO)
    • 映射 infra_config 表,包含主键、分类、名称、键名、键值、类型、可见性、备注等字段
  • 控制器(ConfigController)
    • 提供创建、更新、删除、查询、分页、导出、按键取值等接口
  • 服务实现(ConfigServiceImpl)
    • 校验配置存在性与键唯一性,区分系统配置与自定义配置,处理删除限制
  • 映射器(ConfigMapper)
    • 提供按键查询与分页查询能力
  • RPC 接口(ConfigApi)
    • 对外暴露按键取值的远程调用能力

章节来源

架构总览

配置管理的前后端交互与数据流转如下:

Mermaid Diagram Code:

sequenceDiagram
participant Client as "客户端/调用方"
participant Ctrl as "ConfigController"
participant Svc as "ConfigServiceImpl"
participant Mapper as "ConfigMapper"
participant DB as "数据库"
Client->>Ctrl : "POST /infra/config/create"
Ctrl->>Svc : "createConfig(saveReqVO)"
Svc->>Svc : "校验键唯一性"
Svc->>Mapper : "insert(ConfigDO)"
Mapper->>DB : "INSERT infra_config"
DB-->>Mapper : "返回自增ID"
Mapper-->>Svc : "返回新增记录"
Svc-->>Ctrl : "返回ID"
Ctrl-->>Client : "返回成功"
Client->>Ctrl : "GET /infra/config/get-value-by-key?key=xxx"
Ctrl->>Svc : "getConfigByKey(key)"
Svc->>Mapper : "selectByKey(key)"
Mapper->>DB : "SELECT BY config_key"
DB-->>Mapper : "返回记录或空"
Mapper-->>Svc : "返回记录"
Svc-->>Ctrl : "返回记录"
Ctrl->>Ctrl : "若不可见则抛出可见性错误"
Ctrl-->>Client : "返回值或错误"

图表来源

详细组件分析

表结构:参数配置表(infra_config)

  • 字段定义与约束
    • id:主键,自增(不同数据库方言差异见下方)
    • category:参数分组,字符串,非空
    • type:参数类型,整型,非空(系统配置/自定义配置)
    • name:参数名称,字符串,非空默认值
    • config_key:参数键名,字符串,非空默认值,全局唯一
    • value:参数键值,字符串,非空默认值
    • visible:是否可见,布尔/位,非空,默认不可见
    • remark:备注,字符串
    • creator/updater:创建者/更新者,字符串
    • create_time/update_time:创建/更新时间,带默认值与自动更新
    • deleted:软删除标志,布尔/位,非空,默认未删除
  • 业务含义
    • 分类(category):用于配置的逻辑分组(如 biz、url、ui 等)
    • 类型(type):区分系统内置配置与业务自定义配置
    • 可见性(visible):控制前端是否可获取该配置值
    • 键唯一(config_key):保证配置键的全局唯一,避免冲突
  • 初始化数据示例
    • 包含系统初始密码、监控地址、地图密钥等示例键值对

Mermaid Diagram Code:

erDiagram
INFRA_CONFIG {
bigint id PK
varchar category
tinyint type
varchar name
varchar config_key UK
varchar value
bit visible
varchar remark
varchar creator
datetime create_time
varchar updater
datetime update_time
bit deleted
}

图表来源

章节来源

数据模型与类关系

Mermaid Diagram Code:

classDiagram
class ConfigDO {
+Long id
+String category
+Integer type
+String name
+String configKey
+String value
+Boolean visible
+String remark
}
class ConfigController {
+createConfig(saveReqVO)
+updateConfig(saveReqVO)
+deleteConfig(id)
+getConfig(id)
+getConfigKey(key)
+getConfigPage(pageReqVO)
}
class ConfigServiceImpl {
+createConfig(saveReqVO)
+updateConfig(saveReqVO)
+deleteConfig(id)
+getConfig(id)
+getConfigByKey(key)
+getConfigPage(pageReqVO)
-validateConfigExists(id)
-validateConfigKeyUnique(id,key)
}
class ConfigMapper {
+selectByKey(key)
+selectPage(reqVO)
}
class ConfigApi {
+getConfigValueByKey(key)
}
ConfigController --> ConfigServiceImpl : "依赖"
ConfigServiceImpl --> ConfigMapper : "依赖"
ConfigMapper --> ConfigDO : "映射"
ConfigApi --> ConfigServiceImpl : "调用"

图表来源

章节来源

配置分类管理

  • 分类字段(category)
    • 用于对配置进行逻辑分组,便于检索与治理
    • 示例:biz(业务)、url(外部链接)、ui(界面)、test2(测试)
  • 类型字段(type)
    • 枚举区分系统配置与自定义配置
    • 系统配置不允许被删除,自定义配置可增删改

章节来源

动态配置更新与生效机制

  • 更新流程
    • 控制器接收保存请求,调用服务层更新方法
    • 服务层先校验配置存在性与键唯一性,再执行更新
  • 生效机制
    • 更新后立即生效,键唯一性保障不会产生重复键
    • 可见性控制:不可见配置不会返回给前端

Mermaid Diagram Code:

flowchart TD
Start(["开始"]) --> Validate["校验配置存在性"]
Validate --> Exists{"是否存在?"}
Exists --> |否| ThrowNotFound["抛出不存在异常"]
Exists --> |是| Unique["校验键唯一性"]
Unique --> Duplicate{"是否重复?"}
Duplicate --> |是| ThrowDuplicate["抛出键重复异常"]
Duplicate --> |否| Update["执行更新"]
Update --> End(["结束"])
ThrowNotFound --> End
ThrowDuplicate --> End

图表来源

章节来源

配置键值对、类型、状态、描述等字段说明

  • 配置键值对
    • config_key:全局唯一键,作为查询入口
    • value:实际存储的配置值
  • 配置类型
    • type:系统配置/自定义配置,影响可删除性
  • 配置状态
    • 通过可见性(visible)与软删除(deleted)间接体现状态
  • 配置描述
    • name:配置名称
    • remark:备注说明
  • 时间与操作人
    • create_time/update_time:自动维护
    • creator/updater:记录操作人

章节来源

典型数据示例

  • 初始配置示例(来自数据库脚本)
    • 初始密码、监控地址、地图密钥等键值对
  • 示例字段取值
    • category:biz/url/ui/test2 等
    • type:1(系统)、2(自定义)
    • visible:0/1(不可见/可见)

章节来源

配置管理场景下的数据操作模式

  • 创建配置
    • 校验键唯一性 → 设置类型为自定义 → 插入记录 → 返回主键
  • 查询配置
    • 按主键查询、按键查询、分页查询(支持名称、键、类型、时间范围过滤)
  • 更新配置
    • 校验存在性与键唯一性 → 执行更新
  • 删除配置
    • 校验存在性 → 若为系统类型则拒绝删除 → 执行删除
  • 获取值
    • 按键查询 → 若不可见则拒绝返回

章节来源

依赖关系分析

  • 控制器依赖服务层,服务层依赖映射器,映射器持久化到数据库
  • ConfigApi 通过 Feign 远程调用 ConfigServiceImpl,实现跨模块/微服务的配置读取
  • ConfigDO 统一承载 infra_config 的字段,确保各层一致

Mermaid Diagram Code:

graph LR
Ctrl["ConfigController"] --> Svc["ConfigServiceImpl"]
Svc --> Mapper["ConfigMapper"]
Mapper --> DO["ConfigDO"]
API["ConfigApi"] --> Svc

图表来源

章节来源

性能考虑

  • 查询优化
    • 按键查询使用唯一索引(config_key),建议在高频查询场景下复用
    • 分页查询支持多条件过滤,注意合理使用索引与分页大小
  • 写入优化
    • 批量导入建议使用数据库事务与批量插入,减少往返开销
  • 可见性控制
    • 前端仅获取可见配置,避免敏感信息泄露,同时降低不必要的网络传输

故障排查指南

  • 常见异常与定位
    • 键重复:创建/更新时校验失败,检查 config_key 是否重复
    • 配置不存在:按主键查询为空,确认 ID 是否正确
    • 不允许删除系统配置:当 type 为系统类型时触发,需改为自定义类型
    • 不可见配置:按键取值时若 visible 为不可见,会抛出可见性错误
  • 单元测试参考
    • 测试覆盖了键唯一性、存在性校验、可见性限制等关键路径

章节来源

结论

配置管理模块以 infra_config 为核心,通过严格的键唯一性、可见性控制与类型区分,实现了安全、可控且易扩展的配置体系。后端采用清晰的分层设计,配合 RPC 接口与控制器,满足多场景下的配置读取与管理需求。建议在生产环境中结合索引策略、事务批处理与可观测性监控,持续优化配置读写的性能与稳定性。

附录

  • 数据库方言差异要点
    • 主键自增:MySQL 使用自增,Oracle/PostgreSQL/Kingbase/DB2/H2 使用序列或自增标识
    • 字段类型:bit/number(1,0)/smallint 等在不同数据库中映射一致语义
  • 关键接口与方法
    • 控制器:创建/更新/删除/查询/分页/导出/按键取值
    • 服务:存在性校验、键唯一性校验、类型设置、删除限制
    • 映射器:按键查询、分页查询
    • API:按键取值 RPC 接口

章节来源

用户文档
AI 助手
Agent 列表
请选择一个 Agent 开始对话
AI 问答