Feat: db conn config and mysql interpolateParams

pull/21/head
zijiren233 3 years ago
parent f182a5a955
commit e92e553941

@ -2,6 +2,7 @@ package bootstrap
import (
"context"
"database/sql"
"fmt"
"path/filepath"
"strings"
@ -27,7 +28,7 @@ func InitDatabase(ctx context.Context) error {
if conf.Conf.Database.CustomDSN != "" {
dsn = conf.Conf.Database.CustomDSN
} else if conf.Conf.Database.Port == 0 {
dsn = fmt.Sprintf("%s:%s@unix(%s)/%s?charset=utf8mb4&parseTime=True&loc=Local&tls=%s",
dsn = fmt.Sprintf("%s:%s@unix(%s)/%s?charset=utf8mb4&parseTime=True&loc=Local&tls=%s&interpolateParams=true",
conf.Conf.Database.User,
conf.Conf.Database.Password,
conf.Conf.Database.Host,
@ -36,7 +37,7 @@ func InitDatabase(ctx context.Context) error {
)
log.Infof("mysql database unix socket: %s", conf.Conf.Database.Host)
} else {
dsn = fmt.Sprintf("%s:%s@tcp(%s:%d)/%s?charset=utf8mb4&parseTime=True&loc=Local&tls=%s",
dsn = fmt.Sprintf("%s:%s@tcp(%s:%d)/%s?charset=utf8mb4&parseTime=True&loc=Local&tls=%s&interpolateParams=true",
conf.Conf.Database.User,
conf.Conf.Database.Password,
conf.Conf.Database.Host,
@ -109,11 +110,17 @@ func InitDatabase(ctx context.Context) error {
opts = append(opts, &gorm.Config{
TranslateError: true,
Logger: newDBLogger(),
PrepareStmt: true,
})
d, err := gorm.Open(dialector, opts...)
if err != nil {
log.Fatalf("failed to connect database: %s", err.Error())
}
sqlDB, err := d.DB()
if err != nil {
log.Fatalf("failed to get sqlDB: %s", err.Error())
}
initRawDB(sqlDB)
return db.Init(d)
}
@ -135,3 +142,9 @@ func newDBLogger() logger.Interface {
},
)
}
func initRawDB(db *sql.DB) {
db.SetMaxOpenConns(conf.Conf.Database.MaxOpenConns)
db.SetMaxIdleConns(conf.Conf.Database.MaxIdleConns)
db.SetConnMaxLifetime(time.Duration(conf.Conf.Database.ConnMaxLifetime) * time.Second)
}

@ -18,6 +18,10 @@ type DatabaseConfig struct {
SslMode string `yaml:"ssl_mode" lc:"database ssl mode, default disable" env:"DATABASE_SSL_MODE"`
CustomDSN string `yaml:"custom_dsn" lc:"custom dsn, when not empty, it will ignore other config" env:"DATABASE_CUSTOM_DSN"`
MaxIdleConns int `yaml:"max_idle_conns" lc:"max idle connections (default 10)" env:"DATABASE_MAX_IDLE_CONNS"`
MaxOpenConns int `yaml:"max_open_conns" lc:"max open connections (default 100)" env:"DATABASE_MAX_OPEN_CONNS"`
ConnMaxLifetime int `yaml:"conn_max_lifetime" lc:"connection max lifetime (default 3600 seconds)" env:"DATABASE_CONN_MAX_LIFETIME"`
}
func DefaultDatabaseConfig() DatabaseConfig {
@ -26,5 +30,9 @@ func DefaultDatabaseConfig() DatabaseConfig {
Host: "",
DBName: "synctv",
SslMode: "disable",
MaxIdleConns: 10,
MaxOpenConns: 100,
ConnMaxLifetime: 3600,
}
}

Loading…
Cancel
Save