gorm多数据库连接管理

时间:2020-11-05 13:33:30

标签: go go-gorm golang-migrate

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

有更好的方法吗?

1 个答案:

答案 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
}

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