gorm多数据库连接管理

问题描述

我有一个要求,我的应用程序可以与其他人对话 数据库。我如何管理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;
}

有更好的方法吗?

解决方法

您可以编写一个单独的函数,该函数在每次调用该函数时都会返回当前的数据库连接对象。

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,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
}

这样,每次执行查询后,您的连接都会关闭。