我如何使用 db-resolver 为 gorm v2 中的多个实例配置 sql 连接

How can i configure sql connection for several instances in gorm v2 using db-resolver

我正在为我的项目使用 gorm.io/gorm 和 gorm.io/plugin/dbresolver。如何为每个连接最正确地配置 MaxIdleConns、MaxOpenConns、ConnMaxIdleTime 和 ConnMaxLifetime?


db, _ := gorm.Open(postgres.Open(config.GetConnectArgs()), &gorm.Config{})

replicas := make([]gorm.Dialector, len(config.GetReplicasConfig()))

for i, cfg := range config.GetReplicasConfig() {
    replicas[i] = postgres.Open(cfg.GetConnectArgs())
}

resolver := dbresolver.Register(dbresolver.Config{
    Replicas: replicas,
    Policy:   dbresolver.RandomPolicy{},
})

_ = db.Use(resolver)


dbConfig, _ := db.DB()
dbConfig.SetMaxOpenConns(0)
dbConfig.SetMaxIdleConns(10)
dbConfig.SetConnMaxLifetime(time.Hour)

此代码仅 return 单个连接吗?


dbConfig, _ := db.DB()
dbConfig.SetMaxOpenConns(0)
dbConfig.SetMaxIdleConns(10)
dbConfig.SetConnMaxLifetime(time.Hour)

解析器可以为整个池配置连接

db, _ := gorm.Open(postgres.Open(config.GetConnectArgs()), &gorm.Config{})

replicas := make([]gorm.Dialector, len(config.GetReplicasConfig()))

for i, cfg := range config.GetReplicasConfig() {
    replicas[i] = postgres.Open(cfg.GetConnectArgs())
}

resolver := dbresolver.Register(dbresolver.Config{
    Replicas: replicas,
    Policy:   dbresolver.RandomPolicy{},
}).
   SetMaxOpenConns(0).
   SetMaxIdleConns(10).
   SetConnMaxLifetime(time.Hour)

_ = db.Use(resolver)

它写在文档中。抱歉这个愚蠢的问题。