database.go 1.5 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152
  1. package bootstrap
  2. import (
  3. "errors"
  4. "fmt"
  5. "time"
  6. "github.com/runningwater/gohub/pkg/config"
  7. "github.com/runningwater/gohub/pkg/database"
  8. "github.com/runningwater/gohub/pkg/logger"
  9. "gorm.io/driver/mysql"
  10. "gorm.io/driver/sqlite"
  11. "gorm.io/gorm"
  12. )
  13. // SetupDB 初始化数据库和 ORM
  14. func SetupDB() {
  15. var dbConfig gorm.Dialector
  16. switch config.GetString("database.connection") {
  17. case "mysql":
  18. dsn := fmt.Sprintf("%v:%v@tcp(%v:%v)/%v?charset=%v&parseTime=True&loc=Local",
  19. config.GetString("database.mysql.username"),
  20. config.GetString("database.mysql.password"),
  21. config.GetString("database.mysql.host"),
  22. config.GetString("database.mysql.port"),
  23. config.GetString("database.mysql.database"),
  24. config.GetString("database.mysql.charset"),
  25. )
  26. dbConfig = mysql.New(mysql.Config{
  27. DSN: dsn,
  28. })
  29. case "sqlite":
  30. // 初始化 SQLite 数据库
  31. _database := config.GetString("database.sqlite.database")
  32. dbConfig = sqlite.Open(_database)
  33. default:
  34. panic(errors.New("不支持的数据库连接"))
  35. }
  36. // 连接数据库, 并设置 GORM 日志模式
  37. database.Connect(dbConfig, logger.NewGormLogger())
  38. // 设置最大连接数
  39. database.SQLDB.SetMaxOpenConns(config.GetInt("database.mysql.max_open_connections"))
  40. // 设置最大空闲连接数
  41. database.SQLDB.SetMaxIdleConns(config.GetInt("database.mysql.max_idle_connections"))
  42. // 设置连接的最大存活时间
  43. database.SQLDB.SetConnMaxLifetime(time.Duration(config.GetInt("database.mysql.max_life_seconds")) * time.Second)
  44. // _ = database.DB.AutoMigrate(&user.User{})
  45. }