Skip to content

系统配置 v3.3.3+

在项目开发中配置功能必不可少,常见做法是使用配置文件或数据库。但这些方式存在一些问题——前者不方便修改,需要重新发布项目;后者需要专用的功能页面,工作量大。为了解决这些问题,框架提供了通用的配置功能,统一管理配置数据。

概述

相关的配置项应该放在一起管理,比如用户会话方面的配置,可以包含超时时间、自动续期、是否允许多端在线等内容。 我们把配置项以类的形式组织在一起,一个类表示一组相关的配置,类属性表示具体配置项。

提示

即使仅有一个配置项,也必须放置在某个类内部。这样不仅可以简化存取实现,也可以更好地兼容未来新增配置的场景。

配置的存取基于类实例的 JSON 序列化和反序列化,可以方便地处理不同数据类型的配置项。 另外为了保障配置数据安全,可以随时回滚,还提供了多版本机制。

功能介绍

配置列表

配置列表是主要操作界面,左侧为配置类列表,右侧为该配置的版本明细,如下图所示。 list

具体功能为:

功能说明
新增为选中的配置类添加新版本
复制复制指定的版本为新版本,但不启用
编辑修改配置内容
启用启用指定版本的配置,并自动停用其它版本
删除删除指定版本配置,仅能删除已停用的版本

新增编辑

新增编辑界面如下图所示,左侧显示了配置项的说明信息,右侧为配置内容和备注的输入区。

detail

配置定义

配置类完全由后端定义,前端无法添加。编写一个承载配置项的类,然后添加相应特性声明即可。

csharp
/// <summary>
/// 跨域设置
/// </summary>
[ConfigData("网络设置", "cfg_cors", "跨域设置")]
public class CorsConfig
{
    /// <summary>
    /// 允许域名
    /// </summary>
    [ConfigItem("允许域名", "每行一个")]
    public List<string> AllowOrigins { get; set; } = [];

    /// <summary>
    /// 自定义响应头
    /// </summary>
    [ConfigItem("自定义响应头")]
    public List<string> ResponseHeaders { get; set; } = [];
}

提示

配置类还用来生成配置模板,因此推荐为每个配置项添加适当的默认值。这样不仅可以清晰传达数据类型,也可以在配置不存在时提供默认内容。

在上例中,我们声明了一个“跨域设置”的配置类,包含“允许域名”、“自定义响应头”两个配置项。 其关键在于两个特性的使用:

ConfigDataAttribute

  • 说明:声明配置类。
  • 参数:
    • category {string} 类别,用于多个配置类的分组归类。仅在前端显示用。
    • code {string} 配置类的唯一标识,不允许重复。
    • name {string} 配置类描述,仅显示用。
    • publicUse {bool} 是否公开使用,即能否在前端通过 API 获取。默认为 false。

ConfigItemAttribute

  • 说明:声明配置项。
  • 参数:
    • name {string} 中文名称,用于在新增编辑界面生成配置项说明。
    • description {string} 描述信息,用于在新增编辑界面生成配置项说明。

配置获取

API

GET /api/sys-configs/value/{code}

  • 说明:获取指定配置信息。该配置类必须声明 publicUse 为 true。
  • 参数:
    • code {string} 配置类的唯一标识
  • 返回:配置数据。

服务方法

T GetConfig<T>()

  • 说明:获取配置。T 为配置类。
  • 参数:无
  • 返回:配置对象
csharp
[Autowired]
ISysConfigService service;

var setting = service.GetConfig<CorsConfig>();
Console.WriteLine(setting.AllowOrigins);