| 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980 |
- package database
- import (
- "fmt"
- "os"
- "time"
- "gorm.io/driver/mysql"
- "gorm.io/gorm"
- "gorm.io/gorm/logger"
- )
- var DB *gorm.DB
- // InitDB 初始化数据库连接
- func InitDB() error {
- var err error
- // 从环境变量获取 MySQL 连接信息
- dbHost := os.Getenv("DB_HOST")
- if dbHost == "" {
- dbHost = "localhost"
- }
- dbPort := os.Getenv("DB_PORT")
- if dbPort == "" {
- dbPort = "3306"
- }
- dbUser := os.Getenv("DB_USER")
- if dbUser == "" {
- dbUser = "root"
- }
- dbPassword := os.Getenv("DB_PASSWORD")
- if dbPassword == "" {
- dbPassword = "password"
- }
- dbName := os.Getenv("DB_NAME")
- if dbName == "" {
- dbName = "license_admin"
- }
- // 构建 DSN (Data Source Name)
- dsn := fmt.Sprintf("%s:%s@tcp(%s:%s)/%s?charset=utf8mb4&parseTime=True&loc=Local",
- dbUser, dbPassword, dbHost, dbPort, dbName)
- // 配置 GORM
- config := &gorm.Config{
- Logger: logger.Default.LogMode(logger.Info),
- }
- // 连接数据库,如果数据库不存在会自动创建(需要用户有 CREATE DATABASE 权限)
- DB, err = gorm.Open(mysql.Open(dsn), config)
- if err != nil {
- return fmt.Errorf("连接数据库失败: %v", err)
- }
- // 获取底层 SQL 连接以设置连接池
- sqlDB, err := DB.DB()
- if err != nil {
- return fmt.Errorf("获取数据库连接失败: %v", err)
- }
- // 设置连接池参数
- sqlDB.SetMaxIdleConns(10) // 设置空闲连接池中连接的最大数量
- sqlDB.SetMaxOpenConns(100) // 设置打开数据库连接的最大数量
- sqlDB.SetConnMaxLifetime(time.Hour) // 设置连接可复用的最大时间
- // 测试数据库连接
- if err = sqlDB.Ping(); err != nil {
- return fmt.Errorf("数据库连接测试失败: %v", err)
- }
- return nil
- }
|