mirror of
https://github.com/openimsdk/open-im-server.git
synced 2025-12-30 14:27:02 +08:00
54 lines
1.2 KiB
Go
54 lines
1.2 KiB
Go
package db
|
|
|
|
import (
|
|
"Open_IM/src/common/config"
|
|
"fmt"
|
|
"github.com/jinzhu/gorm"
|
|
_ "github.com/jinzhu/gorm/dialects/mysql"
|
|
"sync"
|
|
"time"
|
|
)
|
|
|
|
type mysqlDB struct {
|
|
sync.RWMutex
|
|
dbMap map[string]*gorm.DB
|
|
}
|
|
|
|
func (m *mysqlDB) DefaultGormDB() (*gorm.DB, error) {
|
|
return m.GormDB(config.Config.Mysql.DBAddress[0], config.Config.Mysql.DBDatabaseName)
|
|
}
|
|
|
|
func (m *mysqlDB) GormDB(dbAddress, dbName string) (*gorm.DB, error) {
|
|
m.Lock()
|
|
defer m.Unlock()
|
|
|
|
k := key(dbAddress, dbName)
|
|
if _, ok := m.dbMap[k]; !ok {
|
|
if err := m.open(dbAddress, dbName); err != nil {
|
|
return nil, err
|
|
}
|
|
}
|
|
return m.dbMap[k], nil
|
|
}
|
|
|
|
func (m *mysqlDB) open(dbAddress, dbName string) error {
|
|
dsn := fmt.Sprintf("%s:%s@tcp(%s)/%s?charset=utf8mb4&parseTime=true&loc=Local",
|
|
config.Config.Mysql.DBUserName, config.Config.Mysql.DBPassword, dbAddress, dbName)
|
|
db, err := gorm.Open("mysql", dsn)
|
|
if err != nil {
|
|
return err
|
|
}
|
|
|
|
db.SingularTable(true)
|
|
db.DB().SetMaxOpenConns(config.Config.Mysql.DBMaxOpenConns)
|
|
db.DB().SetMaxIdleConns(config.Config.Mysql.DBMaxIdleConns)
|
|
db.DB().SetConnMaxLifetime(time.Duration(config.Config.Mysql.DBMaxLifeTime) * time.Second)
|
|
|
|
if m.dbMap == nil {
|
|
m.dbMap = make(map[string]*gorm.DB)
|
|
}
|
|
k := key(dbAddress, dbName)
|
|
m.dbMap[k] = db
|
|
return nil
|
|
}
|