Aucune description
Vous ne pouvez pas sélectionner plus de 25 sujets Les noms de sujets doivent commencer par une lettre ou un nombre, peuvent contenir des tirets ('-') et peuvent comporter jusqu'à 35 caractères.

config.go 5.1KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213
  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. SetServiceName(name string)
  22. SetServiceVersion(version string)
  23. }
  24. // 设置微服务名称。。如果配置文件设置了,就按配置文件
  25. func (c *Config) SetServiceName(name string) {
  26. if c.GetService().ServiceName == "" {
  27. c.GetService().ServiceName = name
  28. }
  29. }
  30. // 设置微服务版本号
  31. func (c *Config) SetServiceVersion(version string) {
  32. c.GetService().ServiceVersion = version
  33. }
  34. // Config 主配置结构体 - 访问门面
  35. type Config struct {
  36. initError error // 初始化错误
  37. }
  38. // 实现IConfig接口 - 从注册表获取配置
  39. func (c *Config) GetDatabase() *subconfigs.DatabaseConfig {
  40. if config := subconfigs.GetRegisteredConfig("database"); config != nil {
  41. return config.(*subconfigs.DatabaseConfig)
  42. }
  43. return nil
  44. }
  45. func (c *Config) GetRedis() *subconfigs.RedisConfig {
  46. if config := subconfigs.GetRegisteredConfig("redis"); config != nil {
  47. return config.(*subconfigs.RedisConfig)
  48. }
  49. return nil
  50. }
  51. func (c *Config) GetDoris() *subconfigs.DorisConfig {
  52. if config := subconfigs.GetRegisteredConfig("doris"); config != nil {
  53. return config.(*subconfigs.DorisConfig)
  54. }
  55. return nil
  56. }
  57. func (c *Config) GetRabbitMQ() *subconfigs.RabbitMQConfig {
  58. if config := subconfigs.GetRegisteredConfig("rabbitmq"); config != nil {
  59. return config.(*subconfigs.RabbitMQConfig)
  60. }
  61. return nil
  62. }
  63. func (c *Config) GetAuth() *subconfigs.AuthConfig {
  64. if config := subconfigs.GetRegisteredConfig("auth"); config != nil {
  65. return config.(*subconfigs.AuthConfig)
  66. }
  67. return nil
  68. }
  69. func (c *Config) GetService() *subconfigs.ServiceConfig {
  70. if config := subconfigs.GetRegisteredConfig("service"); config != nil {
  71. return config.(*subconfigs.ServiceConfig)
  72. }
  73. return nil
  74. }
  75. func (c *Config) GetHTTP() *subconfigs.HTTPConfig {
  76. if config := subconfigs.GetRegisteredConfig("http"); config != nil {
  77. return config.(*subconfigs.HTTPConfig)
  78. }
  79. return nil
  80. }
  81. func (c *Config) GetMicro() *subconfigs.MicroConfig {
  82. if config := subconfigs.GetRegisteredConfig("micro"); config != nil {
  83. return config.(*subconfigs.MicroConfig)
  84. }
  85. return nil
  86. }
  87. func (c *Config) GetLog() *subconfigs.LogConfig {
  88. if config := subconfigs.GetRegisteredConfig("log"); config != nil {
  89. return config.(*subconfigs.LogConfig)
  90. }
  91. return nil
  92. }
  93. func (c *Config) GetInitError() error {
  94. return c.initError
  95. }
  96. // GetService 包级便捷函数 - 获取服务配置
  97. func GetService() *subconfigs.ServiceConfig {
  98. // 直接使用全局的 cfgInstance,假设初始化已完成
  99. if cfgInstance == nil {
  100. // 这种情况不应该发生,但为了安全返回默认值
  101. return &subconfigs.ServiceConfig{}
  102. }
  103. return cfgInstance.GetService()
  104. }
  105. // GetDatabase 包级便捷函数 - 获取数据库配置
  106. func GetDatabase() *subconfigs.DatabaseConfig {
  107. if cfgInstance == nil {
  108. return &subconfigs.DatabaseConfig{}
  109. }
  110. return cfgInstance.GetDatabase()
  111. }
  112. // GetRedis 包级便捷函数 - 获取Redis配置
  113. func GetRedis() *subconfigs.RedisConfig {
  114. if cfgInstance == nil {
  115. return &subconfigs.RedisConfig{}
  116. }
  117. return cfgInstance.GetRedis()
  118. }
  119. // GetHTTP 包级便捷函数 - 获取HTTP配置
  120. func GetHTTP() *subconfigs.HTTPConfig {
  121. if cfgInstance == nil {
  122. return &subconfigs.HTTPConfig{}
  123. }
  124. return cfgInstance.GetHTTP()
  125. }
  126. // GetLog 包级便捷函数 - 获取日志配置
  127. func GetLog() *subconfigs.LogConfig {
  128. if cfgInstance == nil {
  129. return &subconfigs.LogConfig{}
  130. }
  131. return cfgInstance.GetLog()
  132. }
  133. func GetMicro() *subconfigs.MicroConfig {
  134. if cfgInstance == nil {
  135. return &subconfigs.MicroConfig{}
  136. }
  137. return cfgInstance.GetMicro()
  138. }
  139. func GetAuth() *subconfigs.AuthConfig {
  140. if cfgInstance == nil {
  141. return &subconfigs.AuthConfig{}
  142. }
  143. return cfgInstance.GetAuth()
  144. }
  145. var (
  146. cfgInstance *Config
  147. once sync.Once
  148. )
  149. // GetConfig 获取主配置(单例模式)
  150. func GetConfig() (IConfig, error) {
  151. once.Do(func() {
  152. cfgInstance = &Config{}
  153. cfgInstance.initError = LoadConfig() // 加载配置到注册表
  154. })
  155. return cfgInstance, cfgInstance.initError
  156. }
  157. // GetInitError 包级函数 - 兼容现有代码调用
  158. func GetInitError() error {
  159. return cfgInstance.GetInitError()
  160. }
  161. // GetConfigWithError 新方法 - 同时获取配置和错误
  162. func GetConfigWithError() (IConfig, error) {
  163. cfg, err := GetConfig()
  164. return cfg, err
  165. }
  166. // 实现 IConfig 接口的 IsDatabaseConfigured 方法
  167. func (c *Config) IsDatabaseConfigured() bool {
  168. return c.GetDatabase().IsConfigured()
  169. }
  170. // 实现 IConfig 接口的 IsDorisConfigured 方法
  171. func (c *Config) IsDorisConfigured() bool {
  172. return c.GetDoris().IsConfigured()
  173. }
  174. // 实现 IConfig 接口的 IsDorisConfigured 方法
  175. func (c *Config) IsRedisConfigured() bool {
  176. return c.GetRedis().IsConfigured()
  177. }