54 lines
1.2 KiB
Go
54 lines
1.2 KiB
Go
package db
|
|
|
|
import (
|
|
"database/sql"
|
|
"fmt"
|
|
"os"
|
|
"time"
|
|
|
|
_ "github.com/lib/pq"
|
|
"go.uber.org/zap"
|
|
)
|
|
|
|
var DB *sql.DB
|
|
|
|
// 初始化数据库连接
|
|
func Init() {
|
|
// 从环境变量获取数据库配置
|
|
dbHost := os.Getenv("DB_HOST")
|
|
dbPort := os.Getenv("DB_PORT")
|
|
dbUser := os.Getenv("DB_USER")
|
|
dbPassword := os.Getenv("DB_PASSWORD")
|
|
dbName := os.Getenv("DB_NAME")
|
|
zap.L().Info(
|
|
"💡 读取数据库配置",
|
|
zap.String("host", dbHost),
|
|
zap.String("port", dbPort),
|
|
zap.String("user", dbUser),
|
|
zap.String("dbname", dbName),
|
|
)
|
|
|
|
// 构建数据库连接字符串
|
|
connStr := fmt.Sprintf(
|
|
"host=%s port=%s user=%s password=%s dbname=%s sslmode=disable",
|
|
dbHost, dbPort, dbUser, dbPassword, dbName,
|
|
)
|
|
|
|
var err error
|
|
DB, err = sql.Open("postgres", connStr)
|
|
if err != nil {
|
|
zap.L().Panic("❌ 无法连接数据库", zap.Error(err))
|
|
}
|
|
|
|
// 设置连接池参数
|
|
DB.SetMaxOpenConns(100) // 最大打开连接数
|
|
DB.SetMaxIdleConns(20) // 最大空闲连接数
|
|
DB.SetConnMaxLifetime(time.Hour) // 连接最大存活时间
|
|
|
|
// 验证数据库连接
|
|
if err := DB.Ping(); err != nil {
|
|
zap.L().Panic("❌ 数据库连接失败", zap.Error(err))
|
|
}
|
|
|
|
zap.L().Info("✅ 数据库连接验证成功")
|
|
} |