package core
|
|
import (
|
"flag"
|
"fmt"
|
"github.com/gin-gonic/gin"
|
"log"
|
"os"
|
"srm/core/internal"
|
|
"github.com/fsnotify/fsnotify"
|
"github.com/spf13/viper"
|
|
"srm/global"
|
)
|
|
// Viper //
|
// 优先级: 命令行 > 环境变量 > 默认值
|
// Author [SliverHorn](https://github.com/SliverHorn)
|
func Viper(path ...string) *viper.Viper {
|
var config string
|
|
if len(path) == 0 {
|
flag.StringVar(&config, "c", "", "choose config file.")
|
flag.Parse()
|
if config == "" { // 判断命令行参数是否为空
|
if configEnv := os.Getenv(internal.ConfigEnv); configEnv == "" { // 判断 internal.ConfigEnv 常量存储的环境变量是否为空
|
switch gin.Mode() {
|
case gin.DebugMode:
|
config = internal.ConfigDefaultFile
|
fmt.Printf("您正在使用gin模式的%s环境名称,config的路径为%s\n", gin.EnvGinMode, internal.ConfigDefaultFile)
|
case gin.ReleaseMode:
|
config = internal.ConfigReleaseFile
|
fmt.Printf("您正在使用gin模式的%s环境名称,config的路径为%s\n", gin.EnvGinMode, internal.ConfigReleaseFile)
|
case gin.TestMode:
|
config = internal.ConfigTestFile
|
fmt.Printf("您正在使用gin模式的%s环境名称,config的路径为%s\n", gin.EnvGinMode, internal.ConfigTestFile)
|
}
|
} else { // internal.ConfigEnv 常量存储的环境变量不为空 将值赋值于config
|
config = configEnv
|
fmt.Printf("您正在使用%s环境变量,config的路径为%s\n", internal.ConfigEnv, config)
|
}
|
} else { // 命令行参数不为空 将值赋值于config
|
fmt.Printf("您正在使用命令行的-c参数传递的值,config的路径为%s\n", config)
|
}
|
} else { // 函数传递的可变参数的第一个值赋值于config
|
config = path[0]
|
fmt.Printf("您正在使用func Viper()传递的值,config的路径为%s\n", config)
|
}
|
|
v := viper.New()
|
v.SetConfigFile(config)
|
v.SetConfigType("yaml")
|
err := v.ReadInConfig()
|
if err != nil {
|
panic(fmt.Errorf("Fatal error config file: %s \n", err))
|
}
|
v.WatchConfig()
|
|
v.OnConfigChange(func(e fsnotify.Event) {
|
fmt.Println("config file changed:", e.Name)
|
if err = v.Unmarshal(&global.GVA_CONFIG); err != nil {
|
fmt.Println(err)
|
}
|
})
|
if err = v.Unmarshal(&global.GVA_CONFIG); err != nil {
|
fmt.Println(err)
|
}
|
|
ConfigFromEnv()
|
return v
|
}
|
|
func ConfigFromEnv() {
|
DBHost := os.Getenv("DB_HOST")
|
DBName := os.Getenv("DB_NAME")
|
DBPort := os.Getenv("DB_PORT")
|
DBUser := os.Getenv("DB_USER")
|
DBPasswd := os.Getenv("DB_PASSWD")
|
if len(DBHost) > 0 &&
|
len(DBName) > 0 &&
|
len(DBPort) > 0 &&
|
len(DBUser) > 0 &&
|
len(DBPasswd) > 0 {
|
global.GVA_CONFIG.Mysql.Path = DBHost
|
global.GVA_CONFIG.Mysql.Port = DBPort
|
global.GVA_CONFIG.Mysql.Dbname = DBName
|
global.GVA_CONFIG.Mysql.Username = DBUser
|
global.GVA_CONFIG.Mysql.Password = DBPasswd
|
}
|
log.Printf("mysql dsn:%v", global.GVA_CONFIG.Mysql.Dsn())
|
|
grpcPort := os.Getenv("GRPC_PORT")
|
if grpcPort != "" {
|
global.GVA_CONFIG.System.GrpcPort = grpcPort
|
}
|
|
apsGrpc := os.Getenv("APS_GRPC")
|
if apsGrpc != "" {
|
global.GVA_CONFIG.System.GrpcUrl = apsGrpc
|
}
|
|
wmsGrpc := os.Getenv("WMS_GRPC")
|
if wmsGrpc != "" {
|
global.GVA_CONFIG.System.GrpcWmsUrl = wmsGrpc
|
}
|
|
adminGrpc := os.Getenv("ADMIN_GRPC")
|
if adminGrpc != "" {
|
global.GVA_CONFIG.System.GrpcAdminUrl = adminGrpc
|
}
|
log.Printf(" System: %+v", global.GVA_CONFIG.System)
|
}
|