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) SetEnv(name string) } // 根据启动参数设置环境变量 func (c *Config) SetEnv(name string) { if c.GetService().Env == "" { c.GetService().Env = name } } // 设置微服务名称。。如果配置文件设置了,就按配置文件 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() }