如何解决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 举报,一经查实,本站将立刻删除。