服务配置

服务配置初始化,并生成本地配置文件!

使用方法

  • 使用 github.com/spf13/viper 第三方包实现.
  • 需要实现 func getViperConfig() viper_server.ViperConfig 方法:
package cache

import (
  "fmt"

  "github.com/fsnotify/fsnotify"
  "github.com/snowlyg/iris-admin/g"
  "github.com/snowlyg/iris-admin/server/viper_server"
  "github.com/spf13/viper"
)

var CONFIG Redis

type Redis struct {
  DB       int    `mapstructure:"db" json:"db" yaml:"db"`
  Addr     string `mapstructure:"addr" json:"addr" yaml:"addr"`
  Password string `mapstructure:"password" json:"password" yaml:"password"`
  PoolSize int    `mapstructure:"pool-size" json:"poolSize" yaml:"pool-size"`
}

// getViperConfig 获取初始化配置
func getViperConfig() viper_server.ViperConfig {
  configName := "redis"
  db := fmt.Sprintf("%d", CONFIG.DB)
  poolSize := fmt.Sprintf("%d", CONFIG.PoolSize)
  return viper_server.ViperConfig{
    Directory: g.ConfigDir,
    Name:      configName,
    Type:      g.ConfigType,
    Watch: func(vi *viper.Viper) error {
      if err := vi.Unmarshal(&CONFIG); err != nil {
        return fmt.Errorf("反序列化错误: %v", err)
      }
      // 监控配置文件变化
      vi.SetConfigName(configName)
      vi.WatchConfig()
      vi.OnConfigChange(func(e fsnotify.Event) {
        fmt.Println("配置发生变化:", e.Name)
        if err := vi.Unmarshal(&CONFIG); err != nil {
          fmt.Printf("反序列化错误: %v \n", err)
        }
      })
      return nil
    },
    // 注意:设置默认配置值的时候,前面不能有空格等其他符号.必须紧贴左侧.
    Default: []byte(`
{
  "db": ` + db + `,
  "addr": "` + CONFIG.Addr + `",
  "password": "` + CONFIG.Password + `",
  "pool-size": ` + poolSize + `
}`),
  }
}