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, } }