1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
| package mysqlx
|
| import (
| "go.uber.org/zap"
| "gorm.io/driver/mysql"
| "gorm.io/gorm"
| "gorm.io/gorm/logger"
| "gorm.io/gorm/schema"
| "time"
| )
|
| type Conf struct {
| LogMode bool
| MaxIdleCon int64
| MaxOpenCon int64
| ConnMaxLifeTimeSecond int64
| ConnMaxIdleTimeSecond int64
| Dsn 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 := 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(20)
| sqlDb.SetMaxOpenConns(100)
| sqlDb.SetConnMaxLifetime(time.Duration(120) * time.Second)
| sqlDb.SetConnMaxIdleTime(time.Duration(1800) * time.Second)
| openDb = db
| return nil
| }
|
| func GetDB() *gorm.DB {
| return openDb
| }
|
|