2.2 配置

2.2.1 配置介绍

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

2.2.2 文本配置

读取单行配置信息

参考读取单行配置示例2.2 配置 - 图1

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

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

读取结构体配置信息

参考读取结构体配置示例2.2 配置 - 图2

  1. [people]
  2. name = "jupiter"
  1. type People struct {
  2. Name string
  3. }
  4. p := People{}
  5. err := conf.UnmarshalKey("people", &p)
  6. if err != nil {
  7. panic(err.Error())
  8. }
  9. xlog.Info("people info", xlog.String("name", p.Name), xlog.String("type", "structByFile"))

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

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

参考监听文件读取单行配置示例2.2 配置 - 图3

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

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

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

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

参考监听文件读取结构体配置示例2.2 配置 - 图4

  1. [people]
  2. name = "jupiter"
  1. type People struct {
  2. Name string
  3. }
  4. p := People{}
  5. // 设置监听的结构体
  6. conf.OnChange(func(config *conf.Configuration) {
  7. err := config.UnmarshalKey("people", &p)
  8. if err != nil {
  9. panic(err.Error())
  10. }
  11. })
  12. for {
  13. time.Sleep(10 * time.Second)
  14. xlog.Info("people info", xlog.String("name", p.Name), xlog.String("type", "structByFileWatch"))
  15. }

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

2.2.3 远端配置

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