Açıklama Yok
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

config.go 8.1KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327
  1. package config
  2. import (
  3. "sync"
  4. "git.x2erp.com/qdy/go-base/config/subconfigs"
  5. "git.x2erp.com/qdy/go-base/logger"
  6. )
  7. // IConfig 主配置接口(更新支持多数据库)
  8. type IConfig interface {
  9. // 多数据库支持
  10. GetDatabase() *subconfigs.DatabaseConfig // 获取默认数据库(向后兼容)
  11. GetDatabases() *subconfigs.DatabasesConfig // 获取所有数据库配置
  12. GetDatabaseConfig(name string) *subconfigs.DatabaseConfig // 按名称获取数据库配置
  13. //多服务支持
  14. GetService() *subconfigs.ServiceConfig //获取默认微服务配置
  15. GetServices() *subconfigs.ServicesConfig //获所有定义的微服务配置
  16. GetServiceConfig(name string) *subconfigs.ServiceConfig //获取微服务配置
  17. // 其他配置(保持不变)
  18. GetRedis() *subconfigs.RedisConfig
  19. GetDoris() *subconfigs.DorisConfig
  20. GetRabbitMQ() *subconfigs.RabbitMQConfig
  21. GetHTTP() *subconfigs.HTTPConfig
  22. GetMicro() *subconfigs.MicroConfig
  23. GetLog() *subconfigs.LogConfig
  24. GetInitError() error
  25. // 配置检查(更新)
  26. IsDatabaseConfigured() bool
  27. IsDatabaseConfiguredByName(name string) bool
  28. IsDorisConfigured() bool
  29. IsRedisConfigured() bool
  30. SetAppName(name string)
  31. SetAppVersion(version string)
  32. SetAppEnv(name string)
  33. GetAppName() string
  34. GetAppVersion() string
  35. GetAppEnv() string
  36. GetAppAuthToken() string
  37. }
  38. // Config 主配置结构体 - 访问门面
  39. type Config struct {
  40. initError error // 初始化错误
  41. }
  42. // ========== 数据库相关方法(更新) ==========
  43. // GetDatabases 获取所有数据库配置
  44. func (c *Config) GetDatabases() *subconfigs.DatabasesConfig {
  45. if config := subconfigs.GetRegisteredConfig("databases"); config != nil {
  46. if dbs, ok := config.(*subconfigs.DatabasesConfig); ok {
  47. return dbs
  48. }
  49. }
  50. return nil
  51. }
  52. // GetDatabase 获取默认数据库配置(向后兼容)
  53. func (c *Config) GetDatabase() *subconfigs.DatabaseConfig {
  54. dbs := c.GetDatabases()
  55. if dbs == nil {
  56. logger.Errorf("获取默认数据库连接配置发生错误:配置为空!")
  57. return nil
  58. }
  59. return dbs.GetDefaultDatabase()
  60. }
  61. // GetDatabaseConfig 按名称获取数据库配置
  62. func (c *Config) GetDatabaseConfig(name string) *subconfigs.DatabaseConfig {
  63. dbs := c.GetDatabases()
  64. if dbs == nil {
  65. return nil
  66. }
  67. return dbs.GetDatabase(name)
  68. }
  69. // IsDatabaseConfigured 检查默认数据库是否配置
  70. func (c *Config) IsDatabaseConfigured() bool {
  71. dbs := c.GetDatabases()
  72. if dbs == nil {
  73. return false
  74. }
  75. return dbs.IsConfigured()
  76. }
  77. // IsDatabaseConfiguredByName 检查指定名称的数据库是否配置
  78. func (c *Config) IsDatabaseConfiguredByName(name string) bool {
  79. dbs := c.GetDatabases()
  80. if dbs == nil {
  81. return false
  82. }
  83. return dbs.IsConfigured()
  84. }
  85. // ========== 其他配置方法(保持不变) ==========
  86. func (c *Config) GetRedis() *subconfigs.RedisConfig {
  87. if config := subconfigs.GetRegisteredConfig("redis"); config != nil {
  88. return config.(*subconfigs.RedisConfig)
  89. }
  90. return nil
  91. }
  92. func (c *Config) GetDoris() *subconfigs.DorisConfig {
  93. if config := subconfigs.GetRegisteredConfig("doris"); config != nil {
  94. return config.(*subconfigs.DorisConfig)
  95. }
  96. return nil
  97. }
  98. func (c *Config) GetRabbitMQ() *subconfigs.RabbitMQConfig {
  99. if config := subconfigs.GetRegisteredConfig("rabbitmq"); config != nil {
  100. return config.(*subconfigs.RabbitMQConfig)
  101. }
  102. return nil
  103. }
  104. // ========== 微服务相关方法(更新) ==========
  105. // GetServices 获取所有微服务配置
  106. func (c *Config) GetServices() *subconfigs.ServicesConfig {
  107. if config := subconfigs.GetRegisteredConfig("services"); config != nil {
  108. if dbs, ok := config.(*subconfigs.ServicesConfig); ok {
  109. return dbs
  110. }
  111. }
  112. return nil
  113. }
  114. // GetService 获取默认微服务配置(向后兼容)
  115. func (c *Config) GetService() *subconfigs.ServiceConfig {
  116. dbs := c.GetServices()
  117. if dbs == nil {
  118. logger.Errorf("获取默认微服务配置发生错误:配置为空!")
  119. return nil
  120. }
  121. return dbs.GetDefaultService()
  122. }
  123. // GetServiceConfig 按名称获取微服务配置
  124. func (c *Config) GetServiceConfig(name string) *subconfigs.ServiceConfig {
  125. dbs := c.GetServices()
  126. if dbs == nil {
  127. return nil
  128. }
  129. return dbs.GetService(name)
  130. }
  131. func (c *Config) GetHTTP() *subconfigs.HTTPConfig {
  132. if config := subconfigs.GetRegisteredConfig("http"); config != nil {
  133. return config.(*subconfigs.HTTPConfig)
  134. }
  135. return nil
  136. }
  137. func (c *Config) GetMicro() *subconfigs.MicroConfig {
  138. if config := subconfigs.GetRegisteredConfig("micro"); config != nil {
  139. return config.(*subconfigs.MicroConfig)
  140. }
  141. return nil
  142. }
  143. func (c *Config) GetLog() *subconfigs.LogConfig {
  144. if config := subconfigs.GetRegisteredConfig("log"); config != nil {
  145. return config.(*subconfigs.LogConfig)
  146. }
  147. return nil
  148. }
  149. func (c *Config) GetInitError() error {
  150. return c.initError
  151. }
  152. // 实现 IConfig 接口的其他方法
  153. func (c *Config) IsDorisConfigured() bool {
  154. doris := c.GetDoris()
  155. return doris != nil && doris.IsConfigured()
  156. }
  157. func (c *Config) IsRedisConfigured() bool {
  158. redis := c.GetRedis()
  159. return redis != nil && redis.IsConfigured()
  160. }
  161. // 设置方法
  162. func (c *Config) SetAppEnv(name string) {
  163. if c.GetAppEnv() == "" {
  164. c.GetServices().AppEnv = name
  165. }
  166. }
  167. func (c *Config) SetAppName(name string) {
  168. if c.GetAppName() == "" {
  169. c.GetServices().AppName = name
  170. }
  171. }
  172. func (c *Config) SetAppVersion(name string) {
  173. if c.GetAppVersion() == "" {
  174. c.GetServices().AppVersion = name
  175. }
  176. }
  177. // GetAppVersion 获取服务版本
  178. func (c *Config) GetAppVersion() string {
  179. return c.GetServices().AppVersion
  180. }
  181. // GetAppEnv 获取环境
  182. func (c *Config) GetAppEnv() string {
  183. return c.GetServices().AppEnv
  184. }
  185. // GetAppName 获取当前应用名称
  186. func (c *Config) GetAppName() string {
  187. return c.GetServices().AppName
  188. }
  189. // GetAppAuthToken 得到当前配置文件里的token
  190. func (c *Config) GetAppAuthToken() string {
  191. return c.GetServices().AppAuthToken
  192. }
  193. // ========== 包级便捷函数(更新) ==========
  194. // GetDatabases 包级便捷函数 - 获取所有数据库配置
  195. func GetDatabases() *subconfigs.DatabasesConfig {
  196. if cfgInstance == nil {
  197. return nil
  198. }
  199. return cfgInstance.GetDatabases()
  200. }
  201. // GetDatabase 包级便捷函数 - 获取默认数据库配置(向后兼容)
  202. func GetDatabase() *subconfigs.DatabaseConfig {
  203. if cfgInstance == nil {
  204. return &subconfigs.DatabaseConfig{}
  205. }
  206. return cfgInstance.GetDatabase()
  207. }
  208. // GetDatabaseConfig 包级便捷函数 - 按名称获取数据库配置
  209. func GetDatabaseConfig(name string) *subconfigs.DatabaseConfig {
  210. if cfgInstance == nil {
  211. return nil
  212. }
  213. return cfgInstance.GetDatabaseConfig(name)
  214. }
  215. // GetRedis 包级便捷函数 - 获取Redis配置
  216. func GetRedis() *subconfigs.RedisConfig {
  217. if cfgInstance == nil {
  218. return &subconfigs.RedisConfig{}
  219. }
  220. return cfgInstance.GetRedis()
  221. }
  222. // GetHTTP 包级便捷函数 - 获取HTTP配置
  223. func GetHTTP() *subconfigs.HTTPConfig {
  224. if cfgInstance == nil {
  225. return &subconfigs.HTTPConfig{}
  226. }
  227. return cfgInstance.GetHTTP()
  228. }
  229. // GetLog 包级便捷函数 - 获取日志配置
  230. func GetLog() *subconfigs.LogConfig {
  231. if cfgInstance == nil {
  232. return &subconfigs.LogConfig{}
  233. }
  234. return cfgInstance.GetLog()
  235. }
  236. func GetMicro() *subconfigs.MicroConfig {
  237. if cfgInstance == nil {
  238. return &subconfigs.MicroConfig{}
  239. }
  240. return cfgInstance.GetMicro()
  241. }
  242. func GetService() *subconfigs.ServiceConfig {
  243. if cfgInstance == nil {
  244. return &subconfigs.ServiceConfig{}
  245. }
  246. return cfgInstance.GetService()
  247. }
  248. // GetServiceConfig 包级便捷函数 - 按名称获取数微服务配置
  249. func GetServiceConfig(name string) *subconfigs.ServiceConfig {
  250. if cfgInstance == nil {
  251. return nil
  252. }
  253. return cfgInstance.GetServiceConfig(name)
  254. }
  255. // ========== 单例管理 ==========
  256. var (
  257. cfgInstance *Config
  258. once sync.Once
  259. )
  260. // GetConfig 获取主配置(单例模式)
  261. func GetConfig() (IConfig, error) {
  262. once.Do(func() {
  263. cfgInstance = &Config{}
  264. cfgInstance.initError = LoadConfig() // 加载配置到注册表
  265. })
  266. return cfgInstance, cfgInstance.initError
  267. }
  268. // GetInitError 包级函数 - 兼容现有代码调用
  269. func GetInitError() error {
  270. return cfgInstance.GetInitError()
  271. }
  272. // GetConfigWithError 新方法 - 同时获取配置和错误
  273. func GetConfigWithError() (IConfig, error) {
  274. cfg, err := GetConfig()
  275. return cfg, err
  276. }