61 lines
1.4 KiB
Go
61 lines
1.4 KiB
Go
package databaseInit
|
|
|
|
import (
|
|
"fmt"
|
|
_ "github.com/go-sql-driver/mysql"
|
|
"gopkg.in/yaml.v3"
|
|
"gorm.io/driver/mysql"
|
|
"gorm.io/gorm"
|
|
"log"
|
|
"os"
|
|
"time"
|
|
"toutoukan/model/config"
|
|
)
|
|
|
|
var UserDB *gorm.DB
|
|
var Dsn string
|
|
|
|
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,
|
|
)
|
|
|
|
Dsn = dsn
|
|
|
|
fmt.Println("DSN:", dsn)
|
|
|
|
UserDB, err = gorm.Open(mysql.Open(dsn), &gorm.Config{})
|
|
if err != nil {
|
|
log.Fatal(err)
|
|
}
|
|
|
|
sqlDB, err := UserDB.DB()
|
|
if err != nil {
|
|
log.Printf("获取数据库连接池失败: %v", err)
|
|
return
|
|
}
|
|
|
|
// 3. 配置连接池参数
|
|
sqlDB.SetMaxOpenConns(50) // 最大打开连接数(并发连接上限,根据服务器性能调整)
|
|
sqlDB.SetMaxIdleConns(20) // 最大空闲连接数(保持一定空闲连接,避免频繁创建)
|
|
sqlDB.SetConnMaxLifetime(30 * time.Minute) // 连接最大存活时间(防止连接过期)
|
|
sqlDB.SetConnMaxIdleTime(10 * time.Minute) // 连接最大空闲时间
|
|
|
|
}
|