voucher/internal/data/gorm.go

59 lines
1.0 KiB
Go

package data
import (
"fmt"
"gorm.io/driver/mysql"
"gorm.io/gorm"
"gorm.io/gorm/logger"
"voucher/internal/conf"
)
type GormDb struct {
Client *gorm.DB
}
func NewGormDb(c *conf.Bootstrap) (*GormDb, func()) {
db1, mf := db(c.Data.Db)
cleanup := func() {
mf()
}
return &GormDb{
Client: db1,
}, cleanup
}
func db(data *conf.Data_Database) (*gorm.DB, func()) {
//mysqlConn, err := sql.Open(data.Driver, data.Source)
gormDB, err := gorm.Open(
mysql.Open(data.Source),
&gorm.Config{
Logger: logger.Default.LogMode(logger.Info),
},
)
if err != nil {
panic("failed to connect database " + err.Error())
}
sqlDB, err := gormDB.DB()
if err != nil {
panic("failed to gormDB " + err.Error())
}
//sqlDB.SetMaxIdleConns(int(data.MaxIdle))
sqlDB.SetMaxIdleConns(1000)
//sqlDB.SetMaxOpenConns(int(data.MaxOpen))
sqlDB.SetMaxOpenConns(1000)
//sqlDB.SetConnMaxLifetime(1 * time.Hour)
//sqlDB.SetConnMaxIdleTime(15 * time.Minute)
return gormDB, func() {
if gormDB != nil {
fmt.Println("关闭 db")
}
}
}