token/mysql/mysql.go

54 lines
1005 B
Go

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
}