package dbstart // import ( // "log" // "git.x2erp.com/qdy/go-base/config" // "git.x2erp.com/qdy/go-base/logger" // "git.x2erp.com/qdy/go-db/factory/database" // ) // // DBBootstrapper 数据库启动器 // type DBBootstrapper struct { // DBFactories map[string]*database.DBFactory // 改为map存储多个数据库实例 // cfg config.IConfig // } // // NewDBBootstrapper 创建数据库启动器 // func NewDBBootstrapper(cfg config.IConfig) *DBBootstrapper { // return &DBBootstrapper{ // DBFactories: make(map[string]*database.DBFactory), // cfg: cfg, // } // } // // Init 初始化默认数据库 // func (db *DBBootstrapper) Init() *DBBootstrapper { // if db.cfg == nil { // log.Fatal("配置未初始化,请先传入配置") // } // // // 初始化默认数据库 // // dbCfg := db.cfg.GetDatabaseConfig() // // if dbCfg == nil { // // log.Fatal("默认数据库配置未找到") // // } // // log.Printf("正在连接默认数据库: %s:%d/%s", // // dbCfg.Host, dbCfg.Port, dbCfg.Database) // dbFactory, err := database.GetDefaultDBFactory() // if err != nil { // log.Fatalf("默认数据库连接失败: %v", err) // } // db.DBFactories["default"] = dbFactory // log.Println("默认数据库连接成功") // return db // } // // GetDBFactory 获取数据库工厂 // func (db *DBBootstrapper) GetDBFactory(dbName string) *database.DBFactory { // // 如果已经初始化,直接返回 // if factory, exists := db.DBFactories[dbName]; exists { // return factory // } // // 如果还没初始化,按需初始化 // dbFactory, err := database.GetDBFactory(dbName) // if err != nil { // log.Printf("❌ 获取数据库 '%s' 失败: %v", dbName, err) // return nil // } // db.DBFactories[dbName] = dbFactory // return dbFactory // } // // GetDefaultDBFactory 获取默认数据库工厂 // func (db *DBBootstrapper) GetDefaultDBFactory() *database.DBFactory { // return db.GetDBFactory("default") // } // // Close 关闭所有数据库连接 // func (db *DBBootstrapper) Close() { // for name, factory := range db.DBFactories { // logger.Info("正在关闭数据库: %s, factory: %v", name, factory) // if factory != nil { // factory.Close() // logger.Info("数据库 '%s' 连接已关闭", name) // } else { // logger.Error("⚠️ 警告: 数据库 '%s' 的 factory 为 nil", name) // } // } // // 清空map // db.DBFactories = make(map[string]*database.DBFactory) // logger.Info("所有数据库连接已关闭.") // } // // 在 dbstart 包中 // func (db *DBBootstrapper) OnShutdown() { // db.Close() // }