2.2 配置
2.2.1 配置介绍
配置完整性定义是:环境变量、编译注入配置、命令行配置、文本配置、远端配置,这五类数据共同构成了一份完整配置,形成一份完整配置。Jupiter
会对五种类型配置进行整合,最终得到应用使用的配置。
2.2.2 文本配置
读取单行配置信息
[people]
name = "jupiter"
peopleName := conf.GetString("people.name")
xlog.Info("people info", xlog.String("name", peopleName), xlog.String("type", "onelineByFile"))
我们只需要简单两行,就可以读取到配置里的数据,运行go run main.go --config=config.toml
,可以看到运行结果。
读取结构体配置信息
参考读取结构体配置示例 (opens new window)
[people]
name = "jupiter"
type People struct {
Name string
}
p := People{}
err := conf.UnmarshalKey("people", &p)
if err != nil {
panic(err.Error())
}
xlog.Info("people info", xlog.String("name", p.Name), xlog.String("type", "structByFile"))
读取结构体配置,使用conf.UnmarshalKey
方法,第一个参数传入配置里需要解析的Key,第二个参数传入需要解析的结构体对象,运行go run main.go --config=config.toml
,可以看到运行结果。
监听文件读取单行配置信息
参考监听文件读取单行配置示例 (opens new window)
监听文件读取单行配置信息
[people]
name = "jupiter"
for {
time.Sleep(10 * time.Second)
peopleName := conf.GetString("people.name")
xlog.Info("people info", xlog.String("name", peopleName), xlog.String("type", "onelineByFileWatch"))
}
使用监听文件功能,需要使用指令--watch=true
进行开启。获取单行配置的方法,不需要做任何改动,就能够直接使用动态配置功能。,运行go run main.go --config=config.toml --watch=true
,可以看到运行结果。
监听文件读取结构体配置信息
参考监听文件读取结构体配置示例 (opens new window)
[people]
name = "jupiter"
type People struct {
Name string
}
p := People{}
// 设置监听的结构体
conf.OnChange(func(config *conf.Configuration) {
err := config.UnmarshalKey("people", &p)
if err != nil {
panic(err.Error())
}
})
for {
time.Sleep(10 * time.Second)
xlog.Info("people info", xlog.String("name", p.Name), xlog.String("type", "structByFileWatch"))
}
使用监听文件功能,需要使用指令--watch=true
进行开启。获取结构体配置的方法,需要在前面增加一个conf.OnChange
方法,监听配置变动后,改变结构体(这个地方没上锁,生产环境请上锁)。运行go run main.go --config=config.toml --watch=true
,可以看到运行结果。
2.2.3 远端配置
远端配置和文本配置使用方式一致,只需要改变下命令行参数,将原有的--config=config.toml
换成远端配置地址--config=http://remoteConfigAddr
具体用法参考以下example