| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213 |
- package config
-
- import (
- "sync"
-
- "git.x2erp.com/qdy/go-base/config/subconfigs"
- )
-
- // IConfig 主配置接口
- type IConfig interface {
- GetDatabase() *subconfigs.DatabaseConfig
- GetRedis() *subconfigs.RedisConfig
- GetDoris() *subconfigs.DorisConfig
- GetRabbitMQ() *subconfigs.RabbitMQConfig
- GetAuth() *subconfigs.AuthConfig
- GetService() *subconfigs.ServiceConfig
- GetHTTP() *subconfigs.HTTPConfig
- GetMicro() *subconfigs.MicroConfig
- GetLog() *subconfigs.LogConfig
- GetInitError() error
- IsDatabaseConfigured() bool
- IsDorisConfigured() bool
- IsRedisConfigured() bool
- SetServiceName(name string)
- SetServiceVersion(version string)
- }
-
- // 设置微服务名称。。如果配置文件设置了,就按配置文件
- func (c *Config) SetServiceName(name string) {
- if c.GetService().ServiceName == "" {
- c.GetService().ServiceName = name
- }
-
- }
-
- // 设置微服务版本号
- func (c *Config) SetServiceVersion(version string) {
-
- c.GetService().ServiceVersion = version
- }
-
- // Config 主配置结构体 - 访问门面
- type Config struct {
- initError error // 初始化错误
- }
-
- // 实现IConfig接口 - 从注册表获取配置
- func (c *Config) GetDatabase() *subconfigs.DatabaseConfig {
- if config := subconfigs.GetRegisteredConfig("database"); config != nil {
- return config.(*subconfigs.DatabaseConfig)
- }
- return nil
- }
-
- func (c *Config) GetRedis() *subconfigs.RedisConfig {
- if config := subconfigs.GetRegisteredConfig("redis"); config != nil {
- return config.(*subconfigs.RedisConfig)
- }
- return nil
- }
-
- func (c *Config) GetDoris() *subconfigs.DorisConfig {
- if config := subconfigs.GetRegisteredConfig("doris"); config != nil {
- return config.(*subconfigs.DorisConfig)
- }
- return nil
- }
-
- func (c *Config) GetRabbitMQ() *subconfigs.RabbitMQConfig {
- if config := subconfigs.GetRegisteredConfig("rabbitmq"); config != nil {
- return config.(*subconfigs.RabbitMQConfig)
- }
- return nil
- }
-
- func (c *Config) GetAuth() *subconfigs.AuthConfig {
- if config := subconfigs.GetRegisteredConfig("auth"); config != nil {
- return config.(*subconfigs.AuthConfig)
- }
- return nil
- }
-
- func (c *Config) GetService() *subconfigs.ServiceConfig {
- if config := subconfigs.GetRegisteredConfig("service"); config != nil {
- return config.(*subconfigs.ServiceConfig)
- }
- return nil
- }
-
- func (c *Config) GetHTTP() *subconfigs.HTTPConfig {
- if config := subconfigs.GetRegisteredConfig("http"); config != nil {
- return config.(*subconfigs.HTTPConfig)
- }
- return nil
- }
-
- func (c *Config) GetMicro() *subconfigs.MicroConfig {
- if config := subconfigs.GetRegisteredConfig("micro"); config != nil {
- return config.(*subconfigs.MicroConfig)
- }
- return nil
- }
-
- func (c *Config) GetLog() *subconfigs.LogConfig {
- if config := subconfigs.GetRegisteredConfig("log"); config != nil {
- return config.(*subconfigs.LogConfig)
- }
- return nil
- }
-
- func (c *Config) GetInitError() error {
- return c.initError
- }
-
- // GetService 包级便捷函数 - 获取服务配置
- func GetService() *subconfigs.ServiceConfig {
- // 直接使用全局的 cfgInstance,假设初始化已完成
- if cfgInstance == nil {
- // 这种情况不应该发生,但为了安全返回默认值
- return &subconfigs.ServiceConfig{}
- }
- return cfgInstance.GetService()
- }
-
- // GetDatabase 包级便捷函数 - 获取数据库配置
- func GetDatabase() *subconfigs.DatabaseConfig {
- if cfgInstance == nil {
- return &subconfigs.DatabaseConfig{}
- }
- return cfgInstance.GetDatabase()
- }
-
- // GetRedis 包级便捷函数 - 获取Redis配置
- func GetRedis() *subconfigs.RedisConfig {
- if cfgInstance == nil {
- return &subconfigs.RedisConfig{}
- }
- return cfgInstance.GetRedis()
- }
-
- // GetHTTP 包级便捷函数 - 获取HTTP配置
- func GetHTTP() *subconfigs.HTTPConfig {
- if cfgInstance == nil {
- return &subconfigs.HTTPConfig{}
- }
- return cfgInstance.GetHTTP()
- }
-
- // GetLog 包级便捷函数 - 获取日志配置
- func GetLog() *subconfigs.LogConfig {
- if cfgInstance == nil {
- return &subconfigs.LogConfig{}
- }
- return cfgInstance.GetLog()
- }
-
- func GetMicro() *subconfigs.MicroConfig {
- if cfgInstance == nil {
- return &subconfigs.MicroConfig{}
- }
- return cfgInstance.GetMicro()
-
- }
-
- func GetAuth() *subconfigs.AuthConfig {
- if cfgInstance == nil {
- return &subconfigs.AuthConfig{}
- }
- return cfgInstance.GetAuth()
- }
-
- var (
- cfgInstance *Config
- once sync.Once
- )
-
- // GetConfig 获取主配置(单例模式)
- func GetConfig() (IConfig, error) {
- once.Do(func() {
- cfgInstance = &Config{}
- cfgInstance.initError = LoadConfig() // 加载配置到注册表
- })
- return cfgInstance, cfgInstance.initError
- }
-
- // GetInitError 包级函数 - 兼容现有代码调用
- func GetInitError() error {
- return cfgInstance.GetInitError()
- }
-
- // GetConfigWithError 新方法 - 同时获取配置和错误
- func GetConfigWithError() (IConfig, error) {
- cfg, err := GetConfig()
- return cfg, err
- }
-
- // 实现 IConfig 接口的 IsDatabaseConfigured 方法
- func (c *Config) IsDatabaseConfigured() bool {
-
- return c.GetDatabase().IsConfigured()
- }
-
- // 实现 IConfig 接口的 IsDorisConfigured 方法
- func (c *Config) IsDorisConfigured() bool {
-
- return c.GetDoris().IsConfigured()
- }
-
- // 实现 IConfig 接口的 IsDorisConfigured 方法
- func (c *Config) IsRedisConfigured() bool {
-
- return c.GetRedis().IsConfigured()
- }
|