feat: add dsn support #55
This commit is contained in:
@@ -82,6 +82,7 @@ func (a *App) initDatabase() {
|
||||
Password: a.Config.Database.Password,
|
||||
DBName: a.Config.Database.DBName,
|
||||
Path: a.Config.Database.Path,
|
||||
DSN: a.Config.Database.DSN,
|
||||
}
|
||||
|
||||
if err := database.Init(dbCfg); err != nil {
|
||||
|
||||
@@ -25,6 +25,7 @@ type Config struct {
|
||||
Password string
|
||||
DBName string
|
||||
Path string // for sqlite
|
||||
DSN string // for mysql/mariadb unix socket or custom dsn
|
||||
}
|
||||
|
||||
func Init(cfg *Config) error {
|
||||
@@ -40,8 +41,11 @@ func Init(cfg *Config) error {
|
||||
case "sqlite":
|
||||
dialector = sqlite.Open(cfg.Path + "?_busy_timeout=5000")
|
||||
case "mysql":
|
||||
dsn := fmt.Sprintf("%s:%s@tcp(%s:%d)/%s?charset=utf8mb4&parseTime=True&loc=Asia%%2FShanghai",
|
||||
cfg.User, cfg.Password, cfg.Host, cfg.Port, cfg.DBName)
|
||||
dsn := cfg.DSN
|
||||
if dsn == "" {
|
||||
dsn = fmt.Sprintf("%s:%s@tcp(%s:%d)/%s?charset=utf8mb4&parseTime=True&loc=Asia%%2FShanghai",
|
||||
cfg.User, cfg.Password, cfg.Host, cfg.Port, cfg.DBName)
|
||||
}
|
||||
dialector = mysql.Open(dsn)
|
||||
case "postgres":
|
||||
dsn := fmt.Sprintf("host=%s port=%d user=%s password=%s dbname=%s sslmode=disable TimeZone=Asia/Shanghai",
|
||||
|
||||
@@ -25,6 +25,7 @@ type DatabaseConfig struct {
|
||||
Password string `ini:"password"`
|
||||
DBName string `ini:"dbname"`
|
||||
Path string `ini:"path"`
|
||||
DSN string `ini:"dsn"`
|
||||
TablePrefix string `ini:"table_prefix"`
|
||||
}
|
||||
|
||||
@@ -127,8 +128,8 @@ func LoadConfig(path string) (*AppConfig, error) {
|
||||
if Config.Server.URLPrefix != "" {
|
||||
logger.Infof("[Config] URL前缀: %s", Config.Server.URLPrefix)
|
||||
}
|
||||
logger.Infof("[Config] 数据库: type=%s, host=%s, port=%d, dbname=%s",
|
||||
Config.Database.Type, Config.Database.Host, Config.Database.Port, Config.Database.DBName)
|
||||
logger.Infof("[Config] 数据库: type=%s, host=%s, port=%d, dbname=%s, dsn=%v",
|
||||
Config.Database.Type, Config.Database.Host, Config.Database.Port, Config.Database.DBName, Config.Database.DSN != "")
|
||||
|
||||
return Config, nil
|
||||
}
|
||||
@@ -149,6 +150,7 @@ func applyEnvOverrides() {
|
||||
getEnvStr("BH_DB_PASSWORD", &Config.Database.Password)
|
||||
getEnvStr("BH_DB_NAME", &Config.Database.DBName)
|
||||
getEnvStr("BH_DB_PATH", &Config.Database.Path)
|
||||
getEnvStr("BH_DB_DSN", &Config.Database.DSN)
|
||||
getEnvStr("BH_DB_TABLE_PREFIX", &Config.Database.TablePrefix)
|
||||
|
||||
// Security
|
||||
|
||||
Reference in New Issue
Block a user