Skip to content

配置管理

配置管理(Configuration Management)是现代应用程序的核心基础设施,用于统一管理应用程序的设置、参数和环境相关配置信息。通过多配置源整合、类型安全访问和分层结构管理,有效解决配置分散、类型错误和环境差异等问题,提高应用程序的灵活性和可维护性。

快速启动

只需要以下 3 个步骤即可开始使用配置管理框架:

cangjie
import spire_extensions_configuration.*

main() {
    // 1. 定义配置源 
    let json = ###"
    {
        "connectionString": {
            "mysql": "mysql://localhost:3306"
        }
    }
    "###

    // 2. 创建并配置管理器 
    let configuration = ConfigurationManager()
        .addJsonString(json)
        .build()

    // 3. 使用配置 
    println(configuration["connectionString:mysql"])
}

配置读写

配置的键名不区分大小写

读取配置

cangjie
let json = #"
{
    "logging": {
        "logLevel": {
            "default": "Error",
            "spire.lifetime.*": "Info"
        }
    },
    "connectionStrings": {
        "mysql": "mysql://localhost:3306"
    }
}
"#
let configuration = ConfigurationManager()
    .addJsonString(json)
    .build()

// 字符串读取    
configuration["connectionStrings:mysql"] |> println   

// 类型化读取
configuration.getValue<String>("connectionStrings:mysql") |> println

// 读取节
let section = configuration.getSection("logging:logLevel")
section.getValue<String>("default") |> println
section.getValue<String>("spire.lifetime.*") |> println

// 遍历节
for (pattern in section.getChildren()) {
    "${pattern.key}: ${pattern.value}" |> println
}

写入配置

写入配置会往所有配置源写入,请至少提供一个数据源

cangjie
let configuration = ConfigurationManager()
    .addMemory()
    .build()
// 写入配置
configuration["port"] = "8080"
configuration.getValue<Int64>("port") |> println

内置配置源

SPIRE中内置了如下配置:

  1. 内存
  2. json
  3. 命令行参数(--name1=value --name2=value)
  4. 环境变量
cangjie
let configuration = ConfigurationManager()
    .addMemory([("port", "8080")]) // 内存配置
    .addJsonFile("appsettings.json") // 读取json配置文件
    .addCmdArgs(args) // 读取命令行参数
    .addEnvVars("SPIRE_") // 读取SPIRE_开头的环境变量
    .build()

除了内置的数据源,用户也可以提供额外的配置,可以参考json等配置源的实现源码。