説明なし
選択できるのは25トピックまでです。 トピックは、先頭が英数字で、英数字とダッシュ('-')を使用した35文字以内のものにしてください。

config.go 3.4KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140
  1. package config
  2. import (
  3. "sync"
  4. "git.x2erp.com/qdy/go-base/config/subconfigs"
  5. )
  6. // IConfig 主配置接口
  7. type IConfig interface {
  8. GetDatabase() *subconfigs.DatabaseConfig
  9. GetRedis() *subconfigs.RedisConfig
  10. GetDoris() *subconfigs.DorisConfig
  11. GetRabbitMQ() *subconfigs.RabbitMQConfig
  12. GetAuth() *subconfigs.AuthConfig
  13. GetService() *subconfigs.ServiceConfig
  14. GetHTTP() *subconfigs.HTTPConfig
  15. GetMicro() *subconfigs.MicroConfig
  16. GetLog() *subconfigs.LogConfig
  17. GetInitError() error
  18. IsDatabaseConfigured() bool
  19. IsDorisConfigured() bool
  20. IsRedisConfigured() bool
  21. }
  22. // Config 主配置结构体 - 访问门面
  23. type Config struct {
  24. initError error // 初始化错误
  25. }
  26. // 实现IConfig接口 - 从注册表获取配置
  27. func (c *Config) GetDatabase() *subconfigs.DatabaseConfig {
  28. if config := subconfigs.GetRegisteredConfig("database"); config != nil {
  29. return config.(*subconfigs.DatabaseConfig)
  30. }
  31. return nil
  32. }
  33. func (c *Config) GetRedis() *subconfigs.RedisConfig {
  34. if config := subconfigs.GetRegisteredConfig("redis"); config != nil {
  35. return config.(*subconfigs.RedisConfig)
  36. }
  37. return nil
  38. }
  39. func (c *Config) GetDoris() *subconfigs.DorisConfig {
  40. if config := subconfigs.GetRegisteredConfig("doris"); config != nil {
  41. return config.(*subconfigs.DorisConfig)
  42. }
  43. return nil
  44. }
  45. func (c *Config) GetRabbitMQ() *subconfigs.RabbitMQConfig {
  46. if config := subconfigs.GetRegisteredConfig("rabbitmq"); config != nil {
  47. return config.(*subconfigs.RabbitMQConfig)
  48. }
  49. return nil
  50. }
  51. func (c *Config) GetAuth() *subconfigs.AuthConfig {
  52. if config := subconfigs.GetRegisteredConfig("auth"); config != nil {
  53. return config.(*subconfigs.AuthConfig)
  54. }
  55. return nil
  56. }
  57. func (c *Config) GetService() *subconfigs.ServiceConfig {
  58. if config := subconfigs.GetRegisteredConfig("service"); config != nil {
  59. return config.(*subconfigs.ServiceConfig)
  60. }
  61. return nil
  62. }
  63. func (c *Config) GetHTTP() *subconfigs.HTTPConfig {
  64. if config := subconfigs.GetRegisteredConfig("http"); config != nil {
  65. return config.(*subconfigs.HTTPConfig)
  66. }
  67. return nil
  68. }
  69. func (c *Config) GetMicro() *subconfigs.MicroConfig {
  70. if config := subconfigs.GetRegisteredConfig("micro"); config != nil {
  71. return config.(*subconfigs.MicroConfig)
  72. }
  73. return nil
  74. }
  75. func (c *Config) GetLog() *subconfigs.LogConfig {
  76. if config := subconfigs.GetRegisteredConfig("log"); config != nil {
  77. return config.(*subconfigs.LogConfig)
  78. }
  79. return nil
  80. }
  81. func (c *Config) GetInitError() error {
  82. return c.initError
  83. }
  84. var (
  85. cfgInstance *Config
  86. once sync.Once
  87. )
  88. // GetConfig 获取主配置(单例模式)
  89. func GetConfig() IConfig {
  90. once.Do(func() {
  91. cfgInstance = &Config{}
  92. cfgInstance.initError = LoadConfig() // 加载配置到注册表
  93. })
  94. return cfgInstance
  95. }
  96. // GetInitError 包级函数 - 兼容现有代码调用
  97. func GetInitError() error {
  98. return cfgInstance.GetInitError()
  99. }
  100. // GetConfigWithError 新方法 - 同时获取配置和错误
  101. func GetConfigWithError() (IConfig, error) {
  102. cfg := GetConfig()
  103. return cfg, cfg.GetInitError()
  104. }
  105. // 实现 IConfig 接口的 IsDatabaseConfigured 方法
  106. func (c *Config) IsDatabaseConfigured() bool {
  107. return c.GetDatabase().IsConfigured()
  108. }
  109. // 实现 IConfig 接口的 IsDorisConfigured 方法
  110. func (c *Config) IsDorisConfigured() bool {
  111. return c.GetDoris().IsConfigured()
  112. }
  113. // 实现 IConfig 接口的 IsDorisConfigured 方法
  114. func (c *Config) IsRedisConfigured() bool {
  115. return c.GetRedis().IsConfigured()
  116. }