# 2.2 配置

# 2.2.1 配置介绍

配置完整性定义是:环境变量、编译注入配置、命令行配置、文本配置、远端配置,这五类数据共同构成了一份完整配置,形成一份完整配置。Jupiter会对五种类型配置进行整合,最终得到应用使用的配置。

# 2.2.2 文本配置

# 读取单行配置信息

参考读取单行配置示例 (opens new window)

[people]
    name = "jupiter"
1
2
peopleName := conf.GetString("people.name")
xlog.Info("people info", xlog.String("name", peopleName), xlog.String("type", "onelineByFile"))
1
2

我们只需要简单两行,就可以读取到配置里的数据,运行go run main.go --config=config.toml,可以看到运行结果。

# 读取结构体配置信息

参考读取结构体配置示例 (opens new window)

[people]
    name = "jupiter"
1
2
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"))
1
2
3
4
5
6
7
8
9

读取结构体配置,使用conf.UnmarshalKey方法,第一个参数传入配置里需要解析的Key,第二个参数传入需要解析的结构体对象,运行go run main.go --config=config.toml,可以看到运行结果。

# 监听文件读取单行配置信息

参考监听文件读取单行配置示例 (opens new window)

[people]
    name = "jupiter"
1
2
for {
    time.Sleep(10 * time.Second)
    peopleName := conf.GetString("people.name")
    xlog.Info("people info", xlog.String("name", peopleName), xlog.String("type", "onelineByFileWatch"))
}
1
2
3
4
5

使用监听文件功能,需要使用指令--watch=true进行开启。获取单行配置的方法,不需要做任何改动,就能够直接使用动态配置功能。,运行go run main.go --config=config.toml --watch=true,可以看到运行结果。

# 监听文件读取结构体配置信息

参考监听文件读取结构体配置示例 (opens new window)

[people]
    name = "jupiter"
1
2
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"))
}

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16

使用监听文件功能,需要使用指令--watch=true进行开启。获取结构体配置的方法,需要在前面增加一个conf.OnChange方法,监听配置变动后,改变结构体(这个地方没上锁,生产环境请上锁)。运行go run main.go --config=config.toml --watch=true,可以看到运行结果。

# 2.2.3 远端配置

远端配置和文本配置使用方式一致,只需要改变下命令行参数,将原有的--config=config.toml换成远端配置地址--config=http://remoteConfigAddr 具体用法参考以下example