yintai2/base/global/db.go

62 lines
1.1 KiB
Go

package global
import (
"fmt"
"time"
log "github.com/sirupsen/logrus"
"github.com/smbrave/goutil"
"gorm.io/driver/mysql"
"gorm.io/gorm"
)
var (
db *gorm.DB = nil
)
func GetDB() *gorm.DB {
return db
}
func InitDB() {
cfg := GetConfig()
if cfg.Mysql.Host == "" {
return
}
dsn := fmt.Sprintf("%s:%s@tcp(%s:%d)/%s", cfg.Mysql.User,
cfg.Mysql.Pass, cfg.Mysql.Host, cfg.Mysql.Port, cfg.Mysql.Db)
var err error
db, err = gorm.Open(mysql.Open(dsn), &gorm.Config{})
if err != nil {
log.Errorf("open dsn[%s] error[%s]", dsn, err)
panic(err)
}
//全都设置了才会启用连接池配置
if cfg.Mysql.MaxIdle > 0 && cfg.Mysql.MaxOpen > 0 && cfg.Mysql.MaxLifeTime > 0 {
dbSql, err := db.DB()
if err != nil {
log.Errorf("get db error[%s]", err)
}
dbSql.SetMaxOpenConns(cfg.Mysql.MaxOpen)
dbSql.SetMaxIdleConns(cfg.Mysql.MaxIdle)
dbSql.SetConnMaxLifetime(time.Minute * time.Duration(cfg.Mysql.MaxLifeTime))
}
db.Logger = &goutil.GORMLogger{Threshold: int64(cfg.Mysql.Threshold)}
}
func DBPing() error {
d, err := db.DB()
if err != nil {
return err
}
if err := d.Ping(); err != nil {
return err
}
return nil
}