diff --git a/configs/config.yaml b/configs/config.yaml index fb28bab..0d9d6d2 100644 --- a/configs/config.yaml +++ b/configs/config.yaml @@ -22,9 +22,11 @@ database: dbname: with_you sslmode: disable # 读写分离配置(仅 postgres 模式生效,不配置则所有请求走主库) - # 单副本配置(支持环境变量): + # 注意:replica 字段已在 config.go 中显式 BindEnv,环境变量优先于 YAML。 + # 单副本配置(推荐用环境变量覆盖,无需取消下方注释): # APP_DATABASE_REPLICA_HOST, APP_DATABASE_REPLICA_PORT, APP_DATABASE_REPLICA_USER, # APP_DATABASE_REPLICA_PASSWORD, APP_DATABASE_REPLICA_DBNAME, APP_DATABASE_REPLICA_SSLMODE + # APP_DATABASE_REPLICA_MAX_IDLE_CONNS, APP_DATABASE_REPLICA_MAX_OPEN_CONNS(可选,缺省回退主库连接池) # replica: # host: replica1.internal # port: 5432 diff --git a/internal/config/config.go b/internal/config/config.go index 3d2e8ac..a417394 100644 --- a/internal/config/config.go +++ b/internal/config/config.go @@ -64,6 +64,20 @@ func Load(configPath string) (*Config, error) { viper.SetDefault("database.ignore_record_not_found", true) viper.SetDefault("database.parameterized_queries", true) viper.SetDefault("database.replica_policy", "random") + + // 读写分离:单副本字段显式 BindEnv。 + // AutomaticEnv 对 YAML 中未出现的嵌套 key(replica 段在 config.yaml 中默认被注释) + // 不会反向推导,必须逐字段 BindEnv 才能让 APP_DATABASE_REPLICA_HOST 等环境变量生效。 + // 与 jpush.channel.* 处理方式一致(见下方 BindEnv 块)。 + viper.BindEnv("database.replica.host", "APP_DATABASE_REPLICA_HOST") + viper.BindEnv("database.replica.port", "APP_DATABASE_REPLICA_PORT") + viper.BindEnv("database.replica.user", "APP_DATABASE_REPLICA_USER") + viper.BindEnv("database.replica.password", "APP_DATABASE_REPLICA_PASSWORD") + viper.BindEnv("database.replica.dbname", "APP_DATABASE_REPLICA_DBNAME") + viper.BindEnv("database.replica.sslmode", "APP_DATABASE_REPLICA_SSLMODE") + // 副本连接池参数(可选,留空回退到主库连接池配置,见 database.go) + viper.BindEnv("database.replica_max_idle_conns", "APP_DATABASE_REPLICA_MAX_IDLE_CONNS") + viper.BindEnv("database.replica_max_open_conns", "APP_DATABASE_REPLICA_MAX_OPEN_CONNS") viper.SetDefault("redis.type", "miniredis") viper.SetDefault("redis.redis.host", "localhost") viper.SetDefault("redis.redis.port", 6379)