From 1f835502ba54bcf0cb635524e8cb6da825e38a13 Mon Sep 17 00:00:00 2001 From: Mars160 <74127225+Mars160@users.noreply.github.com> Date: Fri, 23 Feb 2024 15:28:48 +0800 Subject: [PATCH] feat: support customize dsn for mysql and pg (#6031) * support for unixsocket to connect to mysql * feat: customize dsn for mysql and pg --------- Co-authored-by: Andy Hsu --- internal/bootstrap/db.go | 7 +++++++ internal/conf/config.go | 1 + 2 files changed, 8 insertions(+) diff --git a/internal/bootstrap/db.go b/internal/bootstrap/db.go index 4c4044f1..5dfa2820 100644 --- a/internal/bootstrap/db.go +++ b/internal/bootstrap/db.go @@ -56,14 +56,21 @@ func InitDB() { } case "mysql": { + //[username[:password]@][protocol[(address)]]/dbname[?param1=value1&...¶mN=valueN] dsn := fmt.Sprintf("%s:%s@tcp(%s:%d)/%s?charset=utf8mb4&parseTime=True&loc=Local&tls=%s", database.User, database.Password, database.Host, database.Port, database.Name, database.SSLMode) + if database.DSN != "" { + dsn = database.DSN + } dB, err = gorm.Open(mysql.Open(dsn), gormConfig) } case "postgres": { dsn := fmt.Sprintf("host=%s user=%s password=%s dbname=%s port=%d sslmode=%s TimeZone=Asia/Shanghai", database.Host, database.User, database.Password, database.Name, database.Port, database.SSLMode) + if database.DSN != "" { + dsn = database.DSN + } dB, err = gorm.Open(postgres.Open(dsn), gormConfig) } default: diff --git a/internal/conf/config.go b/internal/conf/config.go index 92761ea7..b4664562 100644 --- a/internal/conf/config.go +++ b/internal/conf/config.go @@ -17,6 +17,7 @@ type Database struct { DBFile string `json:"db_file" env:"FILE"` TablePrefix string `json:"table_prefix" env:"TABLE_PREFIX"` SSLMode string `json:"ssl_mode" env:"SSL_MODE"` + DSN string `json:"dsn" env:"DSN"` } type Scheme struct {