config.go 1.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687
  1. package config
  2. import (
  3. "fmt"
  4. "git.sxidc.com/go-framework/baize/framework/core/application"
  5. "git.sxidc.com/go-tools/utils/strutils"
  6. "git.sxidc.com/service-supports/fslog"
  7. "git.sxidc.com/service-supports/scm-sdk"
  8. "gopkg.in/yaml.v3"
  9. "os"
  10. )
  11. type Config struct {
  12. ApplicationConfig application.Config
  13. }
  14. var conf Config
  15. func init() {
  16. useSCMEnv := os.Getenv("USE_SCM")
  17. if useSCMEnv == "true" {
  18. initConfigFromSCM()
  19. } else {
  20. initConfigFromConfigFile()
  21. }
  22. }
  23. func GetConfig() Config {
  24. return conf
  25. }
  26. func initConfigFromSCM() {
  27. scmBaseUrl := loadEnvOrPanic("SCM_BASE_URL")
  28. scmNamespace := loadEnvOrPanic("SCM_NAMESPACE")
  29. scmName := loadEnvOrPanic("SCM_NAME")
  30. info, err := scm_sdk.GetCurrentConfiguration(scmBaseUrl, scmNamespace, scmName)
  31. if err != nil {
  32. fslog.Error(err)
  33. panic(err)
  34. }
  35. applicationConfig, err := application.LoadFromYaml(info.Content)
  36. if err != nil {
  37. panic(err)
  38. }
  39. conf.ApplicationConfig = applicationConfig
  40. err = yaml.Unmarshal([]byte(info.Content), &conf)
  41. if err != nil {
  42. panic(err)
  43. }
  44. fslog.Info("Load config from scm finish")
  45. }
  46. func initConfigFromConfigFile() {
  47. configFilePath := os.Getenv("CONFIG_FILE_PATH")
  48. applicationConfig, err := application.LoadFromYamlFile(configFilePath)
  49. if err != nil {
  50. panic(err)
  51. }
  52. conf.ApplicationConfig = applicationConfig
  53. yamlBytes, err := os.ReadFile(configFilePath)
  54. if err != nil {
  55. panic(err)
  56. }
  57. err = yaml.Unmarshal(yamlBytes, &conf)
  58. if err != nil {
  59. panic(err)
  60. }
  61. fmt.Println("Load config file finish")
  62. }
  63. func loadEnvOrPanic(envName string) string {
  64. envValue := os.Getenv(envName)
  65. if strutils.IsStringEmpty(envValue) {
  66. panic("请配置" + envName)
  67. }
  68. return envValue
  69. }