Files

59 lines
1.4 KiB
Go

package svc
import (
"time"
sysModel "sundynix-micro-go/app/system/model"
"sundynix-micro-go/app/system/rpc/internal/config"
"github.com/zeromicro/go-zero/core/logx"
"gorm.io/driver/mysql"
"gorm.io/gorm"
)
type ServiceContext struct {
Config config.Config
DB *gorm.DB
}
func NewServiceContext(c config.Config) *ServiceContext {
db, err := gorm.Open(mysql.Open(c.DB.DataSource), &gorm.Config{})
if err != nil {
logx.Errorf("[system-rpc] ❌ 连接数据库失败: %v", err)
panic(err)
}
// 配置连接池,防止高并发耗尽连接
sqlDB, err := db.DB()
if err != nil {
logx.Errorf("[system-rpc] ❌ 获取底层 DB 失败: %v", err)
panic(err)
}
sqlDB.SetMaxOpenConns(100)
sqlDB.SetMaxIdleConns(20)
sqlDB.SetConnMaxLifetime(time.Hour)
logx.Infof("[system-rpc] ✅ 数据库连接成功 | MaxOpen=100 MaxIdle=20")
// 自动迁移
tables := []interface{}{
&sysModel.SundynixClient{},
&sysModel.SundynixRole{},
&sysModel.SundynixMenu{},
&sysModel.SundynixRoleMenu{},
&sysModel.SundynixOperationRecord{},
&sysModel.SundynixDict{},
&sysModel.SundynixUser{},
&sysModel.SundynixUserRole{},
}
if err := db.AutoMigrate(tables...); err != nil {
logx.Errorf("[system-rpc] ⚠️ 数据库迁移失败: %v", err)
} else {
logx.Infof("[system-rpc] ✅ 数据库迁移完成 | 表数量: %d", len(tables))
}
return &ServiceContext{
Config: c,
DB: db,
}
}