temp
This commit is contained in:
@@ -51,13 +51,11 @@ func LoadConfig() (*Config, error) {
|
||||
}
|
||||
}
|
||||
} else {
|
||||
fmt.Printf("⚠️ 未找到环境配置文件 env.%s.yaml\n", env)
|
||||
fmt.Printf("ℹ️ 未找到环境配置文件 configs/env.%s.yaml,将使用基础配置\n", env)
|
||||
}
|
||||
|
||||
// 4️⃣ 设置环境变量前缀和自动读取
|
||||
baseConfig.SetEnvPrefix("")
|
||||
baseConfig.AutomaticEnv()
|
||||
baseConfig.SetEnvKeyReplacer(strings.NewReplacer(".", "_"))
|
||||
// 4️⃣ 手动处理环境变量覆盖,避免空值覆盖配置文件
|
||||
// overrideWithEnvVars(baseConfig)
|
||||
|
||||
// 5️⃣ 解析配置到结构体
|
||||
var config Config
|
||||
@@ -99,19 +97,10 @@ func mergeConfigs(baseConfig *viper.Viper, overrideSettings map[string]interface
|
||||
|
||||
// findEnvConfigFile 查找环境特定的配置文件
|
||||
func findEnvConfigFile(env string) string {
|
||||
// 尝试查找的配置文件路径
|
||||
// 只查找 configs 目录下的环境配置文件
|
||||
possiblePaths := []string{
|
||||
fmt.Sprintf("configs/env.%s.yaml", env),
|
||||
fmt.Sprintf("configs/env.%s.yml", env),
|
||||
fmt.Sprintf("configs/env.%s", env),
|
||||
fmt.Sprintf("env.%s.yaml", env),
|
||||
fmt.Sprintf("env.%s.yml", env),
|
||||
fmt.Sprintf("env.%s", env),
|
||||
}
|
||||
|
||||
// 如果有自定义环境文件路径
|
||||
if customEnvFile := os.Getenv("ENV_FILE"); customEnvFile != "" {
|
||||
possiblePaths = append([]string{customEnvFile}, possiblePaths...)
|
||||
}
|
||||
|
||||
for _, path := range possiblePaths {
|
||||
@@ -165,7 +154,8 @@ func getEnvironment() string {
|
||||
func printConfigSummary(config *Config, env string) {
|
||||
fmt.Printf("\n🔧 配置摘要:\n")
|
||||
fmt.Printf(" 🌍 环境: %s\n", env)
|
||||
fmt.Printf(" 📄 配置模板: config.yaml\n")
|
||||
fmt.Printf(" 📄 基础配置: config.yaml\n")
|
||||
fmt.Printf(" 📁 环境配置: configs/env.%s.yaml\n", env)
|
||||
fmt.Printf(" 📱 应用名称: %s\n", config.App.Name)
|
||||
fmt.Printf(" 🔖 版本: %s\n", config.App.Version)
|
||||
fmt.Printf(" 🌐 服务端口: %s\n", config.Server.Port)
|
||||
@@ -244,6 +234,26 @@ func ParseDuration(s string) time.Duration {
|
||||
return d
|
||||
}
|
||||
|
||||
// overrideWithEnvVars 手动处理环境变量覆盖,避免空值覆盖配置文件
|
||||
func overrideWithEnvVars(config *viper.Viper) {
|
||||
// 定义需要环境变量覆盖的敏感配置项
|
||||
sensitiveConfigs := map[string]string{
|
||||
"database.password": "DATABASE_PASSWORD",
|
||||
"jwt.secret": "JWT_SECRET",
|
||||
"redis.password": "REDIS_PASSWORD",
|
||||
"wechat_work.webhook_url": "WECHAT_WORK_WEBHOOK_URL",
|
||||
"wechat_work.secret": "WECHAT_WORK_SECRET",
|
||||
}
|
||||
|
||||
// 只覆盖明确设置的环境变量
|
||||
for configKey, envKey := range sensitiveConfigs {
|
||||
if envValue := os.Getenv(envKey); envValue != "" {
|
||||
config.Set(configKey, envValue)
|
||||
fmt.Printf("🔐 已从环境变量覆盖配置: %s\n", configKey)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// SplitAndTrim 分割字符串并去除空格
|
||||
func SplitAndTrim(s, sep string) []string {
|
||||
parts := strings.Split(s, sep)
|
||||
|
||||
Reference in New Issue
Block a user