voucher/internal/data/gorm.go

90 lines
1.6 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()) {
gormDB, err := gorm.Open(
mysql.Open(data.Source),
&gorm.Config{
Logger: logger.Default.LogMode(logger.Info),
SkipDefaultTransaction: false,
},
)
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(1000)
sqlDB.SetMaxOpenConns(1000)
return gormDB, func() {
if gormDB != nil {
fmt.Println("关闭 db")
}
}
}
//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")
// }
//
// }
//}