57 lines
1.0 KiB
Go
57 lines
1.0 KiB
Go
package gorm
|
|
|
|
import (
|
|
"log"
|
|
"os"
|
|
"sync"
|
|
"time"
|
|
|
|
"gorm.io/driver/postgres"
|
|
"gorm.io/gorm"
|
|
gormlogger "gorm.io/gorm/logger"
|
|
)
|
|
|
|
var db *gorm.DB
|
|
|
|
var mu = sync.Mutex{}
|
|
|
|
func GetDB() *gorm.DB {
|
|
if db != nil {
|
|
return db
|
|
}
|
|
mu.Lock()
|
|
defer mu.Unlock()
|
|
if db == nil {
|
|
var err error
|
|
logLevel := gormlogger.Warn
|
|
if os.Getenv("DB_DEBUG") == "true" {
|
|
logLevel = gormlogger.Info
|
|
}
|
|
db, err = gorm.Open(postgres.Open(os.Getenv("POSTGRESQL_DSN")), &gorm.Config{
|
|
Logger: gormlogger.New(
|
|
log.Default(),
|
|
gormlogger.Config{
|
|
SlowThreshold: time.Second, // Slow SQL threshold
|
|
LogLevel: logLevel, // Log level
|
|
Colorful: false, // Disable color
|
|
},
|
|
),
|
|
})
|
|
if err != nil {
|
|
log.Fatal(err)
|
|
}
|
|
sqlDB, err := db.DB()
|
|
if err != nil {
|
|
log.Fatalf("failed to get sql db: %s", err.Error())
|
|
return nil
|
|
}
|
|
|
|
sqlDB.SetConnMaxIdleTime(3 * time.Minute)
|
|
sqlDB.SetConnMaxLifetime(10 * time.Minute)
|
|
|
|
sqlDB.SetMaxIdleConns(1)
|
|
sqlDB.SetMaxOpenConns(10)
|
|
}
|
|
return db
|
|
}
|