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 }