Files
assetx/webapp-back/common/database_mysql.go

65 lines
1.4 KiB
Go
Raw Permalink Normal View History

package common
import (
"fmt"
"log"
"time"
"github.com/gothinkster/golang-gin-realworld-example-app/config"
"gorm.io/driver/mysql"
"gorm.io/gorm"
"gorm.io/gorm/logger"
)
// InitMySQL initializes MySQL database connection
func InitMySQL() *gorm.DB {
cfg := config.AppConfig
if cfg == nil {
log.Fatal("Config not loaded. Please call config.Load() first")
}
// Build DSN
dsn := fmt.Sprintf("%s:%s@tcp(%s:%s)/%s?charset=utf8mb4&parseTime=True&loc=Local",
cfg.DBUser,
cfg.DBPassword,
cfg.DBHost,
cfg.DBPort,
cfg.DBName,
)
// Open database connection
db, err := gorm.Open(mysql.Open(dsn), &gorm.Config{
Logger: logger.Default.LogMode(logger.Info),
})
if err != nil {
log.Fatal("Failed to connect to MySQL:", err)
}
// Get underlying sql.DB
sqlDB, err := db.DB()
if err != nil {
log.Fatal("Failed to get sql.DB:", err)
}
// Set connection pool parameters
sqlDB.SetMaxIdleConns(10)
sqlDB.SetMaxOpenConns(100)
sqlDB.SetConnMaxLifetime(time.Hour)
// Test connection
if err := sqlDB.Ping(); err != nil {
log.Fatal("Failed to ping MySQL:", err)
}
log.Println("✓ MySQL connected successfully")
DB = db
return DB
}
// InitRedis initializes Redis client (you'll need to add redis package)
func InitRedis() {
// TODO: Add Redis initialization
// You'll need to add github.com/redis/go-redis/v9
log.Println("✓ Redis initialization skipped (add go-redis package)")
}