我有一个要求,我的应用程序可以与其他人对话 数据库。我如何管理gorm中的连接。有没有 gorm支持多个数据库连接管理的方式。或者我 需要创建包含所有数据库连接的地图。
if val, ok := selector.issure_db[issuer]; ok {
return val , nil;
} else {
var dbo *db.DB;
selector.mu.Lock()
dbo, err := db.NewDb(Config)
if err != nil {
boot.Logger(ctx).Fatal(err.Error())
}
selector.issure_db[issuer] = dbo;
selector.mu.Unlock()
return repo ,nil;
}
有更好的方法吗?
答案 0 :(得分:0)
您可以编写一个单独的函数,该函数在每次调用该函数时都会返回当前的数据库连接对象。
func getDBConnection(dbUser, dbPassword, dbHost, dbName string) (db *gorm.DB, err error) {
dataSourceName := fmt.Sprintf("%s:%s@tcp(%s:%d)/%s?charset=utf8&parseTime=True&loc=Local", dbUser, dbPassword, dbHost, dbPort, dbName)
db, err = gorm.Open("mysql", dataSourceName)
db.DB().SetConnMaxLifetime(10 * time.Second)
return
}
然后在每次调用getDBConnection函数之后,都调用defer db.Close()。
func getFirstUser() (user User) {
db, _ := getDBConnection()
defer db.Close()
db.First(&user)
return
}
这样,每次执行查询后,您的连接都会关闭。