Нема описа
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

db_bootstrapper.go 2.3KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495
  1. package dbstart
  2. import (
  3. "log"
  4. "git.x2erp.com/qdy/go-base/config"
  5. "git.x2erp.com/qdy/go-base/logger"
  6. "git.x2erp.com/qdy/go-db/factory/database"
  7. )
  8. // DBBootstrapper 数据库启动器
  9. type DBBootstrapper struct {
  10. DBFactories map[string]*database.DBFactory // 改为map存储多个数据库实例
  11. cfg config.IConfig
  12. }
  13. // NewDBBootstrapper 创建数据库启动器
  14. func NewDBBootstrapper(cfg config.IConfig) *DBBootstrapper {
  15. return &DBBootstrapper{
  16. DBFactories: make(map[string]*database.DBFactory),
  17. cfg: cfg,
  18. }
  19. }
  20. // Init 初始化默认数据库
  21. func (db *DBBootstrapper) Init() *DBBootstrapper {
  22. if db.cfg == nil {
  23. log.Fatal("配置未初始化,请先传入配置")
  24. }
  25. // 初始化默认数据库
  26. dbCfg := db.cfg.GetDatabase()
  27. if dbCfg == nil {
  28. log.Fatal("默认数据库配置未找到")
  29. }
  30. log.Printf("正在连接默认数据库: %s:%d/%s",
  31. dbCfg.Host, dbCfg.Port, dbCfg.Database)
  32. dbFactory, err := database.GetDefaultDBFactory()
  33. if err != nil {
  34. log.Fatalf("默认数据库连接失败: %v", err)
  35. }
  36. db.DBFactories["default"] = dbFactory
  37. log.Println("默认数据库连接成功")
  38. return db
  39. }
  40. // GetDBFactory 获取数据库工厂
  41. func (db *DBBootstrapper) GetDBFactory(dbName string) *database.DBFactory {
  42. // 如果已经初始化,直接返回
  43. if factory, exists := db.DBFactories[dbName]; exists {
  44. return factory
  45. }
  46. // 如果还没初始化,按需初始化
  47. dbFactory, err := database.GetDBFactory(dbName)
  48. if err != nil {
  49. log.Printf("❌ 获取数据库 '%s' 失败: %v", dbName, err)
  50. return nil
  51. }
  52. db.DBFactories[dbName] = dbFactory
  53. return dbFactory
  54. }
  55. // GetDefaultDBFactory 获取默认数据库工厂
  56. func (db *DBBootstrapper) GetDefaultDBFactory() *database.DBFactory {
  57. return db.GetDBFactory("default")
  58. }
  59. // Close 关闭所有数据库连接
  60. func (db *DBBootstrapper) Close() {
  61. for name, factory := range db.DBFactories {
  62. logger.Info("正在关闭数据库: %s, factory: %v", name, factory)
  63. if factory != nil {
  64. factory.Close()
  65. logger.Info("数据库 '%s' 连接已关闭", name)
  66. } else {
  67. logger.Error("⚠️ 警告: 数据库 '%s' 的 factory 为 nil", name)
  68. }
  69. }
  70. // 清空map
  71. db.DBFactories = make(map[string]*database.DBFactory)
  72. logger.Info("所有数据库连接已关闭.")
  73. }
  74. // 在 dbstart 包中
  75. func (db *DBBootstrapper) OnShutdown() {
  76. db.Close()
  77. }