u
This commit is contained in:
1 parent
c0ff3ce883
commit
69d03709ba
41 files changed
+5352
-67
No files matched your search
@@ -0,0 +1,65 @@
|
||||
package db
|
||||
|
||||
import (
|
||||
"base-go-v2/internal/config"
|
||||
"fmt"
|
||||
"time"
|
||||
|
||||
"github.com/jmoiron/sqlx"
|
||||
_ "github.com/lib/pq"
|
||||
)
|
||||
|
||||
var DB *sqlx.DB
|
||||
|
||||
var defaultPoolConfig = struct {
|
||||
MaxOpenConns int
|
||||
MaxIdleConns int
|
||||
ConnMaxLifetime time.Duration
|
||||
}{
|
||||
MaxOpenConns: 10,
|
||||
MaxIdleConns: 5,
|
||||
ConnMaxLifetime: 30 * time.Minute,
|
||||
}
|
||||
|
||||
func InitDb() error {
|
||||
d := config.App.Db
|
||||
|
||||
// 构造 DSN
|
||||
dsn := fmt.Sprintf("host=%s port=%d user=%s password=%s dbname=%s sslmode=disable",
|
||||
d.Host, d.Port, d.User, d.Password, d.Dbname)
|
||||
|
||||
db, err := sqlx.Connect("postgres", dsn)
|
||||
if err != nil {
|
||||
return fmt.Errorf("打开数据库失败: %w", err)
|
||||
}
|
||||
|
||||
// 设置连接池(使用默认值,如果用户没传)
|
||||
maxOpenConns := d.MaxOpenConns
|
||||
if maxOpenConns == 0 {
|
||||
maxOpenConns = defaultPoolConfig.MaxOpenConns
|
||||
}
|
||||
db.SetMaxOpenConns(maxOpenConns)
|
||||
|
||||
maxIdleConns := d.MaxIdleConns
|
||||
if maxIdleConns == 0 {
|
||||
maxIdleConns = defaultPoolConfig.MaxIdleConns
|
||||
}
|
||||
db.SetMaxIdleConns(maxIdleConns)
|
||||
|
||||
connMaxLifetime := d.ConnMaxLifetime
|
||||
if connMaxLifetime == 0 {
|
||||
connMaxLifetime = defaultPoolConfig.ConnMaxLifetime
|
||||
}
|
||||
db.SetConnMaxLifetime(connMaxLifetime)
|
||||
|
||||
// 测试连接
|
||||
if err := db.Ping(); err != nil {
|
||||
return fmt.Errorf("数据库连接测试失败: %w", err)
|
||||
}
|
||||
|
||||
fmt.Printf("✅ 数据库连接成功:%s:%d/%s\n", d.Host, d.Port, d.Dbname)
|
||||
|
||||
DB = db
|
||||
|
||||
return nil
|
||||
}
|
||||
Reference in new issue
Block a user