package mysqlx import ( "go.uber.org/zap" "gorm.io/driver/mysql" "gorm.io/gorm" "gorm.io/gorm/logger" "gorm.io/gorm/schema" "moul.io/zapgorm2" "time" ) type Conf struct { LogMode bool MaxIdleCon int64 MaxOpenCon int64 ConnMaxLifeTimeSecond int64 ConnMaxIdleTimeSecond int64 Dsn string Host string } var openDb *gorm.DB func Init(conf *Conf, log *zap.Logger) error { gConfig := &gorm.Config{ PrepareStmt: true, NamingStrategy: schema.NamingStrategy{ TablePrefix: "", SingularTable: true, }, DisableForeignKeyConstraintWhenMigrating: true, } dbLogger := zapgorm2.New(log).LogMode(logger.Info) if !conf.LogMode { dbLogger = dbLogger.LogMode(logger.Silent) } gConfig.Logger = dbLogger db, err := gorm.Open(mysql.Open(conf.Dsn), gConfig) if err != nil { return err } sqlDb, err := db.DB() if err != nil { return err } sqlDb.SetMaxIdleConns(int(conf.MaxIdleCon)) sqlDb.SetMaxOpenConns(int(conf.MaxOpenCon)) sqlDb.SetConnMaxLifetime(time.Duration(conf.ConnMaxLifeTimeSecond) * time.Second) sqlDb.SetConnMaxIdleTime(time.Duration(conf.ConnMaxIdleTimeSecond) * time.Second) openDb = db return nil } func GetDB() *gorm.DB { return openDb }