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 {