user/pkg/pgsql/db.go
timerzz b4448efb2a
Some checks failed
Build image / build (push) Failing after 26s
添加工作流
2025-05-21 12:29:01 +08:00

72 lines
1.8 KiB
Go

package pgsql
import (
"fmt"
"log"
"os"
"time"
"github.com/caarlos0/env/v11"
"github.com/cloudwego/hertz/pkg/common/hlog"
"gorm.io/driver/postgres"
"gorm.io/gorm"
"gorm.io/gorm/logger"
"gorm.io/gorm/schema"
)
type Config struct {
Host string `env:"DB_HOST"`
Port string `env:"DB_PORT"`
User string `env:"DB_USERNAME"`
Password string `env:"DB_PASSWORD"`
DBName string `env:"DB_DBNAME"`
}
// InitDB 初始化数据库连接
func InitDB() *gorm.DB {
var cfg Config
if err := env.Parse(&cfg); err != nil {
hlog.Fatalf("解析数据库环境变量失败: %v", err)
}
// 配置日志
newLogger := logger.New(
log.New(os.Stdout, "\r\n", log.LstdFlags),
logger.Config{
SlowThreshold: time.Second, // 慢SQL阈值
LogLevel: logger.Warn, // 日志级别
IgnoreRecordNotFoundError: true, // 忽略记录未找到错误
Colorful: true, // 彩色输出
},
)
// 配置GORM
config := &gorm.Config{
Logger: newLogger,
NamingStrategy: schema.NamingStrategy{
SingularTable: true, // 使用单数表名
},
}
dsn := fmt.Sprintf("host=%s user=%s password=%s dbname=%s port=%s sslmode=disable TimeZone=Asia/Shanghai",
cfg.Host, cfg.User, cfg.Password, cfg.DBName, cfg.Port)
// 连接数据库
DB, err := gorm.Open(postgres.Open(dsn), config)
if err != nil {
hlog.Fatalf("连接数据库失败: %v", err)
}
hlog.Info("数据库连接成功")
// 获取底层SQL连接池
sqlDB, err := DB.DB()
if err != nil {
hlog.Fatalf("获取数据库连接池失败: %v", err)
}
// 设置连接池参数
sqlDB.SetMaxIdleConns(10) // 最大空闲连接数
sqlDB.SetMaxOpenConns(100) // 最大打开连接数
sqlDB.SetConnMaxLifetime(time.Hour) // 连接最大生命周期
return DB
}