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.3KB

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