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 }