gitee.com/woood2/luca@v1.0.4/internal/db/gorm.go (about)

     1  package db
     2  
     3  import (
     4  	"fmt"
     5  	"gitee.com/woood2/luca/internal/conf"
     6  	"gitee.com/woood2/luca/internal/db/zapgorm2"
     7  	"go.uber.org/zap"
     8  	"gorm.io/driver/mysql"
     9  	"gorm.io/gorm"
    10  	"gorm.io/gorm/logger"
    11  	"log"
    12  	"time"
    13  )
    14  
    15  var globalGormDB *gorm.DB
    16  
    17  func SetGlobalGormDB(db *gorm.DB) {
    18  	globalGormDB = db
    19  }
    20  
    21  func GlobalGormDB() *gorm.DB {
    22  	return globalGormDB
    23  }
    24  
    25  func NewGormDB(env string, c *conf.Mysql, zapLogger *zap.Logger) *gorm.DB {
    26  	user := c.User
    27  	pwd := c.Pwd
    28  	host := c.Host
    29  	port := c.Port
    30  	name := c.DB
    31  
    32  	dsn := fmt.Sprintf("%s:%s@tcp(%s:%d)/%s?charset=utf8mb4&parseTime=True&loc=Local&timeout=5s", user, pwd, host, port, name)
    33  
    34  	level := logger.Info
    35  	if conf.IsPro(env) {
    36  		level = logger.Warn
    37  	}
    38  	newLogger := zapgorm2.New(zapLogger, level, 200*time.Millisecond)
    39  	newLogger.SetAsDefault() // optional: configure gorm to use this zapgorm.Logger for callbacks
    40  
    41  	if db, err := gorm.Open(mysql.Open(dsn), &gorm.Config{
    42  		Logger: newLogger,
    43  	}); err != nil {
    44  		log.Panicln(err)
    45  		return nil
    46  	} else {
    47  		sqlDB, e := db.DB()
    48  		if e != nil {
    49  			log.Panicln(e)
    50  			return nil
    51  		}
    52  		sqlDB.SetMaxIdleConns(c.MaxIdleConns) //If n <= 0, no idle connections are retained.
    53  		sqlDB.SetMaxOpenConns(c.MaxOpenConns) //If n <= 0, then there is no limit on the number of open connections.
    54  		sqlDB.SetConnMaxLifetime(time.Hour)
    55  		return db
    56  	}
    57  }