微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

gorm多数据库连接管理

如何解决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
}

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

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。