package mysql import ( "time" log "github.com/sirupsen/logrus" "github.com/spf13/viper" "gorm.io/driver/mysql" "gorm.io/gorm" "gorm.io/gorm/logger" ) var ( _db *gorm.DB ) //New mysql instance func New() *gorm.DB { if _db != nil { mysqlDB, err := _db.DB() if err != nil { log.WithFields(log.Fields{ "func": "New", }).Errorf("%v", err) goto RENEW } if err := mysqlDB.Ping(); err != nil { mysqlDB.Close() log.WithFields(log.Fields{ "func": "New", }).Errorf("%v", err) goto RENEW } return _db } RENEW: db, err := gorm.Open(mysql.Open(viper.GetString("mysql.addr")), &gorm.Config{ SkipDefaultTransaction: true, Logger: logger.Default.LogMode(logger.Silent), }) if err != nil { log.WithFields(log.Fields{ "func": "New", }).Errorf("%v", err) } sdb, _ := db.DB() sdb.SetConnMaxLifetime(time.Hour) sdb.SetMaxIdleConns(viper.GetInt("mysql.maxidle")) sdb.SetMaxOpenConns(viper.GetInt("mysql.maxopen")) _db = db return _db }