59 lines
1.4 KiB
Go
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,
|
|
}
|
|
}
|