目录
目录
配置模块化
为什么需要配置文件
- 代码中对于一些可能会变化的内容,采用硬编码不便于维护
- 如:监听的IP和端口
- 如:数据库服务器地址和端口
- 如:当前运行的模式(开发/测试)
- ...
Viper
Viper的功能
Viper是国外大神spf13编写的开源配置解决方案,具有如下特性
- 设置默认值
- 可以读取如下格式的配置文件:JSON、TOML、YAML、HCL
- 监控配置文件改动,并热加载配置文件
- 支持直接设置配置项的值
- 从环境变量读取配置
- 从远程配置中心读取配置(etc/consul),并监控变动
- etcd是一个分布式一致性的key-value存储技术,被用来做配置共享和服务发现
- 从命令行flag读取配置
- 从缓存中读取配置
Viper配置读取顺序
Viper可以同时从不同的位置读取配置,不同位置的配置具有不同的优先级,高优先级的配置会覆盖低优先级相同的配置,按优先级从高到低排列如下
- 通过viper.Set函数显示设置的配置
- 命令行参数
- 环境变量
- 配置文件
- Key/Value存储
- 默认值
配置文件解析
apiserver采用YAML格式的配置文件,采用YAML格式是因为YAML表达的格式更丰富,可读性更强
在初始化配置文件后,Viper也可以非常方便地读取多个层级的配置
读取配置只需要调用viper.GetString()、viper.GetInt()和viper.GetBool()等函数即可
新建配置文件
在apiserver/conf/config.yaml(默认配置文件名字固定为config.yaml)
runmode: debug # 开发模式, debug, release, test
addr: :8000 # HTTP绑定