package bootstrap import ( "errors" "fmt" "time" "github.com/runningwater/gohub/pkg/config" "github.com/runningwater/gohub/pkg/database" "github.com/runningwater/gohub/pkg/logger" "gorm.io/driver/mysql" "gorm.io/driver/sqlite" "gorm.io/gorm" ) // SetupDB 初始化数据库和 ORM func SetupDB() { var dbConfig gorm.Dialector switch config.GetString("database.connection") { case "mysql": dsn := fmt.Sprintf("%v:%v@tcp(%v:%v)/%v?charset=%v&parseTime=True&loc=Local", config.GetString("database.mysql.username"), config.GetString("database.mysql.password"), config.GetString("database.mysql.host"), config.GetString("database.mysql.port"), config.GetString("database.mysql.database"), config.GetString("database.mysql.charset"), ) dbConfig = mysql.New(mysql.Config{ DSN: dsn, }) case "sqlite": // 初始化 SQLite 数据库 _database := config.GetString("database.sqlite.database") dbConfig = sqlite.Open(_database) default: panic(errors.New("不支持的数据库连接")) } // 连接数据库, 并设置 GORM 日志模式 database.Connect(dbConfig, logger.NewGormLogger()) // 设置最大连接数 database.SQLDB.SetMaxOpenConns(config.GetInt("database.mysql.max_open_connections")) // 设置最大空闲连接数 database.SQLDB.SetMaxIdleConns(config.GetInt("database.mysql.max_idle_connections")) // 设置连接的最大存活时间 database.SQLDB.SetConnMaxLifetime(time.Duration(config.GetInt("database.mysql.max_life_seconds")) * time.Second) // _ = database.DB.AutoMigrate(&user.User{}) }