You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

46 lines
996 B

  1. package core
  2. import (
  3. "fmt"
  4. "gin-vue-admin/global"
  5. _ "gin-vue-admin/packfile"
  6. "github.com/fsnotify/fsnotify"
  7. "github.com/spf13/viper"
  8. "github.com/spf13/pflag"
  9. )
  10. const defaultConfigFile = "config.yaml"
  11. func init() {
  12. pflag.StringP("configFile","c", "", "choose config file.")
  13. pflag.Parse()
  14. // 优先级: 命令行 > 环境变量 > 默认值
  15. v := viper.New()
  16. v.BindPFlags(pflag.CommandLine)
  17. v.SetEnvPrefix("gva")
  18. v.BindEnv("configFile") // GVA_CONFIGFILE
  19. configFile := v.GetString("configFile")
  20. if configFile == ""{
  21. configFile = defaultConfigFile
  22. }
  23. v.SetConfigFile(configFile)
  24. err := v.ReadInConfig()
  25. if err != nil {
  26. panic(fmt.Errorf("Fatal error config file: %s \n", err))
  27. }
  28. v.WatchConfig()
  29. v.OnConfigChange(func(e fsnotify.Event) {
  30. fmt.Println("config file changed:", e.Name)
  31. if err := v.Unmarshal(&global.GVA_CONFIG); err != nil {
  32. fmt.Println(err)
  33. }
  34. })
  35. if err := v.Unmarshal(&global.GVA_CONFIG); err != nil {
  36. fmt.Println(err)
  37. }
  38. global.GVA_VP = v
  39. }