跳到主要内容
版本:0.3.x(Latest)

基本介绍

LinaPro为插件提供两个配置读取服务,分别服务于不同的配置层次:

  • ConfigService:读取当前插件自己的业务配置,插件通过services.Config()获取
  • HostConfigService:读取宿主公开的配置白名单键,插件通过services.HostConfig()获取

两个服务都提供类型化读取方法(StringBoolIntDurationScan),但职责边界严格分离:插件业务配置不应写入宿主config.yaml,宿主内部配置不应通过HostConfigService暴露给插件。

设计思路

插件配置 ConfigService

ConfigService采用三层优先级覆盖模型:

优先级配置位置说明
1生产配置根下plugins/<plugin-id>/config.yaml运维侧覆盖,生产环境最高优先级
2apps/lina-plugins/<plugin-id>/manifest/config/config.yaml开发期默认配置
3动态插件产物中的manifest/config/config.yaml动态插件随发布版本携带的默认配置

manifest/config/config.example.yaml是配置模板,不参与运行时默认读取。它只用于文档说明和初始化指导。

ConfigService是插件作用域的:主框架在构造服务时自动绑定当前插件ID,插件只能读取自己的配置,不能读取其他插件的配置。

宿主配置 HostConfigService

HostConfigService采用白名单模型:宿主维护一个公开配置键列表,只有列表中的键才能通过此服务读取。典型白名单键包括:

说明
workspace.basePath工作台基础路径
i18n.default默认Locale
i18n.enabled是否启用国际化

HostConfigService的白名单设计是为了防止插件扫描宿主完整配置树,避免读取数据库连接串、密钥等敏感配置。

架构位置

两个配置服务在启动和请求处理阶段都有使用:

插件在路由注册阶段(registerRoutes)通常读取启动级配置,在请求处理阶段按需读取运行时配置。

主要能力

两个服务共享相同的方法签名:

方法说明
Get返回原始配置值
Exists检查配置键是否存在
Scan将配置段扫描到目标结构体
String读取字符串值,缺失时返回默认值
Bool读取布尔值,缺失时返回默认值
Int读取整数值,缺失时返回默认值
Duration读取时间间隔值,缺失时返回默认值

设计约束

  • 插件不应使用g.Cfg() 插件通过ConfigService读取自己的配置,不应直接使用GoFrame的全局配置扫描宿主完整配置树。
  • 插件配置不应写入宿主config.yaml 插件业务配置应放在自己的配置路径下,保持配置隔离。
  • HostConfigService只读白名单键。 插件不应尝试通过HostConfigService读取非白名单配置,这类请求会返回空值。
  • 便捷方法基于Get StringBoolIntDurationScanGet之上的类型化便捷方法,不是独立的授权方法。

相关服务

  • ManifestService - 读取manifest/下的原始资源文件,与配置服务互补
  • I18nService - 配置中的i18n.default等键影响翻译行为