ソースを参照

优化 优先级: 命令行 > 环境变量 > 默认值 功能

SliverHorn 4 年 前
コミット
bfda990cae
3 ファイル変更21 行追加16 行削除
  1. 1 0
      server/config.yaml
  2. 2 1
      server/config/config.go
  3. 18 15
      server/core/config.go

+ 1 - 0
server/config.yaml

@@ -78,6 +78,7 @@ system:
   db-type: "mysql"  # support mysql/postgresql/sqlite/sqlserver
   need-init-data: false
   error-to-email: false
+  config-env: "GVA_CONFIG"
 
 # captcha configuration
 captcha:

+ 2 - 1
server/config/config.go

@@ -22,7 +22,8 @@ type System struct {
 	Addr          int    `mapstructure:"addr" json:"addr" yaml:"addr"`
 	DbType        string `mapstructure:"db-type" json:"dbType" yaml:"db-type"`
 	NeedInitData  bool   `mapstructure:"need-init-data" json:"needInitData" yaml:"need-init-data"`
-	ErrorToEmail bool `mapstructure:"error-to-email" json:"errorToEmail" yaml:"error-to-email"`
+	ErrorToEmail  bool   `mapstructure:"error-to-email" json:"errorToEmail" yaml:"error-to-email"`
+	ConfigEnv     string `mapstructure:"config-env" json:"configEnv" yaml:"config-env"`
 }
 
 type JWT struct {

+ 18 - 15
server/core/config.go

@@ -1,32 +1,35 @@
 package core
 
 import (
+	"flag"
 	"fmt"
 	"gin-vue-admin/global"
 	_ "gin-vue-admin/packfile"
 	"github.com/fsnotify/fsnotify"
 	"github.com/spf13/viper"
-	"github.com/spf13/pflag"
+	"os"
 )
 
+var config string
+
 const defaultConfigFile = "config.yaml"
 
 func init() {
-	pflag.StringP("configFile","c", "", "choose config file.")
-	pflag.Parse()
-
-	// 优先级: 命令行 > 环境变量 > 默认值
-	v := viper.New()
-	v.BindPFlags(pflag.CommandLine)
-	v.SetEnvPrefix("gva")
-	v.BindEnv("configFile") // GVA_CONFIGFILE
-
-	configFile := v.GetString("configFile")
-	if configFile == ""{
-		configFile = defaultConfigFile
+	flag.StringVar(&config, "c", "", "choose config file.")
+	flag.Parse()
+	if config == "" { // 优先级: 命令行 > 环境变量 > 默认值
+		if configEnv := os.Getenv(global.GVA_CONFIG.System.ConfigEnv); configEnv == "" {
+			config = defaultConfigFile
+			fmt.Printf("您正在使用config的默认值,config的路径为%v\n", defaultConfigFile)
+		} else {
+			config = configEnv
+			fmt.Printf("您正在使用GVA_CONFIG环境变量,config的路径为%v\n", config)
+		}
+	} else {
+		fmt.Printf("您正在使用命令行的-c参数传递的值,config的路径为%v\n", config)
 	}
-
-	v.SetConfigFile(configFile)
+	v := viper.New()
+	v.SetConfigFile(config)
 	err := v.ReadInConfig()
 	if err != nil {
 		panic(fmt.Errorf("Fatal error config file: %s \n", err))