2025-04-12 15:25:34 +07:00

48 lines
1.3 KiB
Go

package initialize
import (
"fmt"
"time"
"github.com/dungnt11/todoms_golang/global"
"go.uber.org/zap"
"gorm.io/driver/mysql"
"gorm.io/gorm"
)
// checkErrorPanic kiểm tra lỗi và gọi panic nếu có lỗi, đồng thời ghi log chi tiết.
func checkErrorPanic(err error, errString string) {
if err != nil {
global.Logger.Error(errString, zap.Error(err))
panic(err)
}
}
// InitMysql khởi tạo kết nối đến cơ sở dữ liệu MySQL và trả về đối tượng *gorm.DB.
func InitMysql() *gorm.DB {
m := global.Config.Database
dsn := "%s:%s@tcp(%s:%v)/%s?charset=utf8mb4&parseTime=True&loc=Local"
s := fmt.Sprintf(dsn, m.Username, m.Password, m.Host, m.Port, m.Database)
db, err := gorm.Open(mysql.Open(s), &gorm.Config{
SkipDefaultTransaction: false,
})
checkErrorPanic(err, "InitMysql initialization error")
global.Logger.Info("Initializing MySQL Successfully")
setPool(db)
return db
}
// setPool thiết lập các thông số cho connection pool của cơ sở dữ liệu.
func setPool(db *gorm.DB) {
m := global.Config.Database
sqlDb, err := db.DB()
if err != nil {
global.Logger.Error("Failed to get sql.DB from gorm.DB", zap.Error(err))
return
}
sqlDb.SetMaxIdleConns(m.MaxIdleConns)
sqlDb.SetMaxOpenConns(m.MaxOpenConns)
sqlDb.SetConnMaxLifetime(time.Duration(m.ConnMaxLifetime) * time.Second)
}