config
简介
用于读取和管理应用程序的配置参数。该模块支持从 JSON 文件加载配置、验证配置的合法性,以及在运行时动态管理配置项。
config.gs 配置管理模块说明文档
概述
config.gs 是一个功能强大的配置管理模块,用于读取和管理应用程序的配置参数。该模块支持从 JSON 文件加载配置、验证配置的合法性,以及在运行时动态管理配置项。
主要特性
- JSON 配置文件支持:从指定的 JSON 文件读取配置
- JSON Schema 验证:使用 JSON Schema 验证配置的合法性
- 本地配置覆盖:支持本地配置文件覆盖全局配置
- 启动参数支持:通过命令行参数
--script-args传递配置 - 配置合并:智能合并多个配置源,支持深度合并
- 动态配置管理:运行时增删改查配置项
API 档
初始化函数
create()
模块初始化函数,自动执行以下操作:
- 读取启动参数中的配置文件路径
- 加载全局配置文件
- 加载本地配置文件(如果存在)
- 执行 JSON Schema 验证
配置文件查找顺序:
- 启动参数
--global指定的路径 - 宏定义
__CONFIG__指定的路径 - 默认路径
/config.json
配置加载函数
load(val, schema = nil)
add_global_opts 的别名函数。
参数:
val: 配置数据(map 对象或文件路径)schema: JSON Schema 验证文件路径(可选)
add_global_opts(val, schema = nil)
批量添加全局配置参数。
参数:
val: 配置数据,可以是:- map 对象:直接添加到全局配置
- 文件路径:从文件读取配置
schema: JSON Schema 验证文件路径(可选)
示例:
// 从文件加载配置
add_global_opts("/path/to/config.json", "/path/to/schema.json");
// 直接添加配置
add_global_opts({"database": {"host": "localhost", "port": 3306}});
add_global_opt(name, val)
添加单个全局配置参数。
参数:
name: 参数名称val: 参数值
示例:
add_global_opt("debug", true);
add_global_opt("timeout", 30);
配置读取函数
boot_opt(name)
获取启动参数(通过 --script-args 指定)。
参数:
name: 参数名称(自动添加--前缀)
返回值: 参数值(字符串),不存在返回 nil
global_opt(name)
获取全局配置参数。
参数:
name: 参数名称
返回值: 参数值,不存在返回 nil
opt(name)
智能获取配置参数,优先返回启动参数,其次返回全局配置。
参数:
name: 参数名称
返回值: 参数值,不存在返回 nil
query(name)
通过路径表达式获取嵌套的配置项。
参数:
name: 路径表达式(如 "database.host")
返回值: 配置值
示例:
// 假设配置为 {"database": {"host": "localhost", "port": 3306}}
string host = query("database.host"); // 返回 "localhost"
get_global_config()
获取全部的全局配置。
返回值: 包含所有配置的 map 对象
配置修改函数
set(name, val)
通过路径表达式设置配置项。
参数:
name: 路径表达式val: 新的值
示例:
set("database.host", "192.168.1.100");
set("debug", false);
工具函数
merge_opts(opts1, opts2)
深度合并两个配置 map。
参数:
opts1: 基础配置opts2: 要合并的配置
返回值: 合并后的新配置
合并规则:
- 相同 key 的 map 值会递归合并
- 其他类型的值会被 opts2 覆盖
is_valid(opts, schema)
验证配置是否符合 JSON Schema。
参数:
opts: 要验证的配置schema: JSON Schema 文件路径或内容
返回值: 验证是否通过(boolean)
get_by_class_map(a, key = nil)
通过 class_map 模板读取配置。
参数:
a: class_map 实例key: 配置中的键名(可选)
返回值: 填充了配置值的 class_map 实例
特性:
- 自动匹配 class_map 中的字段名
- 如果 class_map 包含
valid()方法,会调用进行验证
使用示例
基本使用
import src.config;
// 获取配置值
string db_host = config.opt("db_host");
int timeout = config.global_opt("timeout");
// 设置配置值
config.add_global_opt("api_key", "your-api-key");
config.set("server.port", 8080);
配置文件示例
config.json:
{
"server": {
"host": "0.0.0.0",
"port": 8080,
"ssl": false
},
"database": {
"type": "mysql",
"host": "localhost",
"port": 3306,
"name": "myapp"
},
"logging": {
"level": "info",
"file": "/var/log/app.log"
}
}
config.local.json:
{
"server": {
"port": 8081
},
"database": {
"host": "192.168.1.100"
},
"logging": {
"level": "debug"
}
}
JSON Schema 验证示例
schema.json:
{
"$schema": "http://json-schema.org/draft-07/schema#",
"type": "object",
"properties": {
"server": {
"type": "object",
"properties": {
"host": {"type": "string"},
"port": {"type": "integer", "minimum": 1, "maximum": 65535}
},
"required": ["host", "port"]
}
}
}