mysqlx.go 1.1 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556
  1. package mysqlx
  2. import (
  3. "go.uber.org/zap"
  4. "gorm.io/driver/mysql"
  5. "gorm.io/gorm"
  6. "gorm.io/gorm/logger"
  7. "gorm.io/gorm/schema"
  8. "moul.io/zapgorm2"
  9. "time"
  10. )
  11. type Conf struct {
  12. LogMode bool
  13. MaxIdleCon int64
  14. MaxOpenCon int64
  15. ConnMaxLifeTimeSecond int64
  16. ConnMaxIdleTimeSecond int64
  17. Dsn string
  18. }
  19. var openDb *gorm.DB
  20. func Init(conf *Conf, log *zap.Logger) error {
  21. gConfig := &gorm.Config{
  22. PrepareStmt: true,
  23. NamingStrategy: schema.NamingStrategy{
  24. TablePrefix: "",
  25. SingularTable: true,
  26. },
  27. DisableForeignKeyConstraintWhenMigrating: true,
  28. }
  29. dbLogger := zapgorm2.New(log).LogMode(logger.Info)
  30. if !conf.LogMode {
  31. dbLogger = dbLogger.LogMode(logger.Silent)
  32. }
  33. gConfig.Logger = dbLogger
  34. db, err := gorm.Open(mysql.Open(conf.Dsn), gConfig)
  35. if err != nil {
  36. return err
  37. }
  38. sqlDb, err := db.DB()
  39. if err != nil {
  40. return err
  41. }
  42. sqlDb.SetMaxIdleConns(20)
  43. sqlDb.SetMaxOpenConns(100)
  44. sqlDb.SetConnMaxLifetime(time.Duration(120) * time.Second)
  45. sqlDb.SetConnMaxIdleTime(time.Duration(1800) * time.Second)
  46. openDb = db
  47. return nil
  48. }
  49. func GetDB() *gorm.DB {
  50. return openDb
  51. }