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

config.go 4.7KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197
  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. // GetService 包级便捷函数 - 获取服务配置
  85. func GetService() *subconfigs.ServiceConfig {
  86. // 直接使用全局的 cfgInstance,假设初始化已完成
  87. if cfgInstance == nil {
  88. // 这种情况不应该发生,但为了安全返回默认值
  89. return &subconfigs.ServiceConfig{}
  90. }
  91. return cfgInstance.GetService()
  92. }
  93. // GetDatabase 包级便捷函数 - 获取数据库配置
  94. func GetDatabase() *subconfigs.DatabaseConfig {
  95. if cfgInstance == nil {
  96. return &subconfigs.DatabaseConfig{}
  97. }
  98. return cfgInstance.GetDatabase()
  99. }
  100. // GetRedis 包级便捷函数 - 获取Redis配置
  101. func GetRedis() *subconfigs.RedisConfig {
  102. if cfgInstance == nil {
  103. return &subconfigs.RedisConfig{}
  104. }
  105. return cfgInstance.GetRedis()
  106. }
  107. // GetHTTP 包级便捷函数 - 获取HTTP配置
  108. func GetHTTP() *subconfigs.HTTPConfig {
  109. if cfgInstance == nil {
  110. return &subconfigs.HTTPConfig{}
  111. }
  112. return cfgInstance.GetHTTP()
  113. }
  114. // GetLog 包级便捷函数 - 获取日志配置
  115. func GetLog() *subconfigs.LogConfig {
  116. if cfgInstance == nil {
  117. return &subconfigs.LogConfig{}
  118. }
  119. return cfgInstance.GetLog()
  120. }
  121. func GetMicro() *subconfigs.MicroConfig {
  122. if cfgInstance == nil {
  123. return &subconfigs.MicroConfig{}
  124. }
  125. return cfgInstance.GetMicro()
  126. }
  127. func GetAuth() *subconfigs.AuthConfig {
  128. if cfgInstance == nil {
  129. return &subconfigs.AuthConfig{}
  130. }
  131. return cfgInstance.GetAuth()
  132. }
  133. var (
  134. cfgInstance *Config
  135. once sync.Once
  136. )
  137. // GetConfig 获取主配置(单例模式)
  138. func GetConfig() (IConfig, error) {
  139. once.Do(func() {
  140. cfgInstance = &Config{}
  141. cfgInstance.initError = LoadConfig() // 加载配置到注册表
  142. })
  143. return cfgInstance, cfgInstance.initError
  144. }
  145. // GetInitError 包级函数 - 兼容现有代码调用
  146. func GetInitError() error {
  147. return cfgInstance.GetInitError()
  148. }
  149. // GetConfigWithError 新方法 - 同时获取配置和错误
  150. func GetConfigWithError() (IConfig, error) {
  151. cfg, err := GetConfig()
  152. return cfg, err
  153. }
  154. // 实现 IConfig 接口的 IsDatabaseConfigured 方法
  155. func (c *Config) IsDatabaseConfigured() bool {
  156. return c.GetDatabase().IsConfigured()
  157. }
  158. // 实现 IConfig 接口的 IsDorisConfigured 方法
  159. func (c *Config) IsDorisConfigured() bool {
  160. return c.GetDoris().IsConfigured()
  161. }
  162. // 实现 IConfig 接口的 IsDorisConfigured 方法
  163. func (c *Config) IsRedisConfigured() bool {
  164. return c.GetRedis().IsConfigured()
  165. }