| 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495 |
- 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.GetDatabase()
- 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()
- }
|