refactor(config): enable environment variable binding for database replica settings
Viper's AutomaticEnv does not bind nested keys when sections are commented out in YAML. Add explicit BindEnv calls for APP_DATABASE_REPLICA_* variables so they work when the replica section is not defined in config.yaml. Also bind optional connection pool parameters (MAX_IDLE_CONNS, MAX_OPEN_CONNS).
This commit is contained in:
@@ -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)
|
||||
|
||||
Reference in New Issue
Block a user