Files
toutoukan/init/databaseInit/databaseInit.go

61 lines
1.4 KiB
Go
Raw Normal View History

2025-08-10 02:10:21 +08:00
package databaseInit
import (
"fmt"
_ "github.com/go-sql-driver/mysql"
"gopkg.in/yaml.v3"
2025-09-13 20:00:52 +08:00
"gorm.io/driver/mysql"
"gorm.io/gorm"
"log"
2025-08-10 02:10:21 +08:00
"os"
2025-09-13 20:00:52 +08:00
"time"
2025-08-10 02:10:21 +08:00
"toutoukan/model/config"
)
2025-09-13 20:00:52 +08:00
var UserDB *gorm.DB
var Dsn string
2025-08-10 02:10:21 +08:00
func DbInit() {
data, err := os.ReadFile("./config.yaml")
if err != nil {
panic(fmt.Errorf("读取配置文件失败: %w", err))
}
// 解析配置
var config config.Config
if err := yaml.Unmarshal(data, &config); err != nil {
panic(fmt.Errorf("解析YAML失败: %w", err))
}
// 构建DSN
dsn := fmt.Sprintf("%s:%s@tcp(%s:%d)/toutoukan?%s",
config.Database.Username,
config.Database.Password,
config.Database.Host,
config.Database.Port,
config.Database.Params,
)
2025-09-13 20:00:52 +08:00
Dsn = dsn
2025-08-10 02:10:21 +08:00
fmt.Println("DSN:", dsn)
2025-09-13 20:00:52 +08:00
UserDB, err = gorm.Open(mysql.Open(dsn), &gorm.Config{})
2025-08-10 02:10:21 +08:00
if err != nil {
2025-09-13 20:00:52 +08:00
log.Fatal(err)
2025-08-10 02:10:21 +08:00
}
2025-09-13 20:00:52 +08:00
sqlDB, err := UserDB.DB()
if err != nil {
log.Printf("获取数据库连接池失败: %v", err)
return
2025-08-10 02:10:21 +08:00
}
2025-09-13 20:00:52 +08:00
// 3. 配置连接池参数
sqlDB.SetMaxOpenConns(50) // 最大打开连接数(并发连接上限,根据服务器性能调整)
sqlDB.SetMaxIdleConns(20) // 最大空闲连接数(保持一定空闲连接,避免频繁创建)
sqlDB.SetConnMaxLifetime(30 * time.Minute) // 连接最大存活时间(防止连接过期)
sqlDB.SetConnMaxIdleTime(10 * time.Minute) // 连接最大空闲时间
2025-08-10 02:10:21 +08:00
}