database.go 1.6 KB

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