91 lines
1.6 KiB
Go
91 lines
1.6 KiB
Go
package mysql
|
|
|
|
import (
|
|
commonConfig "common/config"
|
|
"common/log"
|
|
"common/query"
|
|
|
|
"fmt"
|
|
"gorm.io/driver/mysql"
|
|
"gorm.io/gorm"
|
|
"time"
|
|
)
|
|
|
|
const (
|
|
DBNameEcosmos = "ecosmos"
|
|
DBNameEcosmosShop = "ecosmos_shop"
|
|
)
|
|
|
|
var dbs = make(map[string]*gorm.DB)
|
|
var queryS = make(map[string]*query.Query)
|
|
|
|
func Init(cfg *commonConfig.MysqlConfig) error {
|
|
db, err := initOneDB(cfg, DBNameEcosmosShop)
|
|
if err != nil {
|
|
return err
|
|
}
|
|
queryS[DBNameEcosmosShop] = query.Use(db)
|
|
|
|
db, err = initOneDB(cfg, DBNameEcosmos)
|
|
if err != nil {
|
|
return err
|
|
}
|
|
query.SetDefault(db)
|
|
queryS[DBNameEcosmos] = query.Q
|
|
return nil
|
|
}
|
|
|
|
func initOneDB(cfg *commonConfig.MysqlConfig, dbName string) (*gorm.DB, error) {
|
|
dialect := fmt.Sprintf("%s:%s@tcp(%s:%s)/%s?charset=utf8mb4&parseTime=True&loc=Local", cfg.User, cfg.Password, cfg.Host, cfg.Port, dbName)
|
|
db, err := gorm.Open(
|
|
mysql.New(
|
|
mysql.Config{
|
|
DSN: dialect,
|
|
},
|
|
),
|
|
&gorm.Config{
|
|
TranslateError: true,
|
|
},
|
|
)
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
sqlDb, err := db.DB()
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
sqlDb.SetMaxOpenConns(50)
|
|
sqlDb.SetMaxIdleConns(5)
|
|
sqlDb.SetConnMaxLifetime(time.Second * 10)
|
|
if err = sqlDb.Ping(); err != nil {
|
|
return nil, err
|
|
}
|
|
|
|
dbs[dbName] = db
|
|
return db.Debug(), nil
|
|
}
|
|
|
|
func DBQuery(dbName string) *query.Query {
|
|
if q, ok := queryS[dbName]; ok {
|
|
return q
|
|
}
|
|
|
|
log.Errorf("mysql db not init: %v", dbName)
|
|
return nil
|
|
}
|
|
|
|
func Close() error {
|
|
fmt.Println("close mysql connect")
|
|
for _, db := range dbs {
|
|
sqlDb, err := db.DB()
|
|
if err != nil {
|
|
return err
|
|
}
|
|
err = sqlDb.Close()
|
|
if err != nil {
|
|
return err
|
|
}
|
|
}
|
|
return nil
|
|
}
|